2010-11-27 13 views
5

adresindeki TcpListener.AcceptTcpClient() numaralı ürünlerde beklemeyi istediğim bir iş parçacığım var.Geçersiz Thread.Suspend olmadan engelleme iş parçacığı askıya nasıl?

Ben yaklaşık Monitor.Wait(...) okudum, ama ben sadece muteksler ile çalışma deneyimine sahip ve iplik bir engelleme yöntemi bekler eğer, bu ilginç olur.

Thread.Suspend(...) artık kullanılmıyorsa, iş parçacığını nasıl askıya almalıyım?

+1

Eğer iş parçacığı zaten engellenmişse, onu askıya almanın bir anlamı yoktur. Lütfen detaylandırır mısınız? –

+0

Tamam, ne demek istediğini anladım. İş parçacığının gelen TCP bağlantılarını tüketmesini ve onu "askıya aldığımda" herhangi bir kaynak kullanmasını istemiyorum. Eğer bu zaten geçerliyse, 'askıya alınmış' bayrağı ayarlanmış ve AcceptTcpClient 'ifadesi geri dönmenin yolunu bulduktan sonra beklemekte midir? –

cevap

2

Bu mümkün değil, çözülemeyen bir yarış durumudur. Dinleyici, askıya almak istemeden önce bir bağlantıyı bir microsecond olarak kabul etmiş olabilir. Dinleyiciyi kapatmak için herhangi bir bağlantı kabul etmeyecek tek şey yoludur.

Mantığınızı burada yeniden düşünün. Durdurmak istediğiniz bu bağlantı ile ne yapacak olursa olsun, bunun yerine kilitlenmesi gerekiyor.

+0

İş parçacığından kurtulup asenkronize olan “BeginAcceptTcpClient” kullanarak çözüldü. –

İlgili konular