Monitor.Wait Yöntem

Tanım

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller.

Aşırı Yüklemeler

Name Description
Wait(Object, Int32, Boolean)

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller. Belirtilen zaman aşımı aralığı ularsa, iş parçacığı hazır kuyruğa girer. Bu yöntem ayrıca bağlam için eşitleme etki alanının (eşitlenmiş bir bağlamdaysa) beklemeden önce çıkılıp çıkılmayacağını ve daha sonra yeniden alınıp alınmayacağını belirtir.

Wait(Object)

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller.

Wait(Object, Int32)

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller. Belirtilen zaman aşımı aralığı ularsa, iş parçacığı hazır kuyruğa girer.

Wait(Object, TimeSpan)

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller. Belirtilen zaman aşımı aralığı ularsa, iş parçacığı hazır kuyruğa girer.

Wait(Object, TimeSpan, Boolean)

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller. Belirtilen zaman aşımı aralığı ularsa, iş parçacığı hazır kuyruğa girer. İsteğe bağlı olarak, beklemeden önce eşitlenen bağlam için eşitleme etki alanından çıkar ve etki alanını daha sonra yeniden alır.

Wait(Object, Int32, Boolean)

Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller. Belirtilen zaman aşımı aralığı ularsa, iş parçacığı hazır kuyruğa girer. Bu yöntem ayrıca bağlam için eşitleme etki alanının (eşitlenmiş bir bağlamdaysa) beklemeden önce çıkılıp çıkılmayacağını ve daha sonra yeniden alınıp alınmayacağını belirtir.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, int millisecondsTimeout, bool exitContext);
public static bool Wait(object obj, int millisecondsTimeout, bool exitContext);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * int * bool -> bool
static member Wait : obj * int * bool -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer, exitContext As Boolean) As Boolean

Parametreler

obj
Object

Üzerinde bekleyebileceğiniz nesne.

millisecondsTimeout
Int32

İş parçacığının hazır kuyruğa girmesi için beklenen milisaniye sayısı.

exitContext
Boolean

true beklemeden önce bağlam (eşitlenmiş bir bağlamdaysa) için eşitleme etki alanından çıkmak ve yeniden almak; aksi takdirde , false.

Döndürülenler

true belirtilen süre dolmadan önce kilit yeniden alındıysa; false belirtilen süre geçtikten sonra kilit yeniden alındıysa. Yöntem, kilit yeniden alınana kadar döndürülmüyor.

Öznitelikler

Özel durumlar

obj parametresi null'dir.

Wait eşitlenmiş bir kod bloğu içinden çağrılmıyor.

Çağıran Wait iş parçacığı daha sonra bekleme durumundan kesilir. Başka bir iş parçacığı bu iş parçacığının Interrupt() yöntemini çağırdığında bu durum ortaya çıkar.

parametresinin millisecondsTimeout değeri negatiftir ve değerine Infiniteeşit değildir.

Açıklamalar

Wait(Object, Int32, Boolean) yöntemi

Bu yöntem, obj parametresi üzerinde özel kilidi yeniden alana kadar tamamlanmaz.

Şu anda belirtilen nesnedeki kilidin sahibi olan iş parçacığı, nesneyi başka bir iş parçacığının erişebilmesi için serbest bırakmak için bu yöntemi çağırır. Arayan, kilidi yeniden almak için beklerken engellenir. Çağıranın başka bir iş parçacığının işlemlerinin sonucu olarak gerçekleşecek durum değişikliğini beklemesi gerektiğinde bu yöntem çağrılır.

Zaman aşımı, başka bir iş parçacığı Pulse veya PulseAll yöntemini çağırmadan kilidi serbest bırakırsa, mevcut iş parçacığının süresiz olarak engellenmemesini sağlar. Ayrıca iş parçacığını hazır kuyruğa taşır ve bekleme kuyruğunda önündeki diğer iş parçacıklarını atlayarak kilidi daha erken yeniden alabilir. İş parçacığı, kilidi zaman aşımından önce yeniden alıp almadığını belirlemek için Wait yönteminin dönüş değerini kontrol edebilir. İş parçacığı beklemeye yol açan koşulları değerlendirebilir ve gerekirse yeniden Wait yöntemini çağırabilir.

Bir iş parçacığı Wait’yi çağırdığında, kilidi serbest bırakır ve bekleme kuyruğuna girer. Bu noktada, hazır kuyruktaki bir sonraki iş parçacığının (varsa) kilidin denetimini almasına izin verilir. Çağrılan Wait iş parçacığı, kilidi tutan bir iş parçacığı çağırana PulseAllkadar bekleme kuyruğunda kalır veya kuyrukta bir sonraki iş parçacığıdır ve kilidi tutan bir iş parçacığı çağırır Pulse. Ancak, başka bir iş parçacığı bu nesnenin millisecondsTimeout veya Pulse yöntemini çağırmadan önce PulseAll süresi dolarsa, özgün iş parçacığı kilidi yeniden kazanmak için hazır kuyruğuna taşınır.

Note

Infinite parametresi için belirtilirse, kilit sahibi millisecondsTimeout ya da Pulse çağrısını yapmadığı sürece, bu yöntem süresiz olarak PulseAll engel olur. Eğer millisecondsTimeout sıfıra eşitse, Wait çağıran iş parçacığı kilidi serbest bırakır ve kilidi yeniden kazanmak için hemen hazır kuyruğa girer.

Belirtilen nesne için Wait kaç kez çağrılmış olursa olsun, çağıran Enter işlemini bir kez gerçekleştirir. Kavramsal olarak, Wait yöntemi, çağıranın nesnede Enter kaç kez çağrıldığını depolar ve kilitli nesneyi tamamen serbest bırakmak için gerektiği kadar Exit çağrılır. Çağıran daha sonra nesneyi yeniden almak için beklerken engeller. Çağrı yapan kilidi yeniden edindiğinde, sistem, arayan için kaydedilen Enter sayıyı geri yüklemek için gerektiği kadar çok kez Enter çağırır. Çağrısı Wait yalnızca belirtilen nesnenin kilidini serbest bırakır; çağıran diğer nesnelerdeki kilitlerin sahibiyse, bu kilitler serbest bırakılmaz.

Note

Eşitlenmiş bir nesne, çeşitli başvurular içerir: Bunlar arasında, kilidi şu anda elinde tutan iş parçacığına bir başvuru, kilidi almaya hazır olan iş parçacıklarını içeren hazır kuyruğa bir başvuru ve nesnenin durumundaki bir değişikliğin bildirimini bekleyen iş parçacıklarını içeren bekleme kuyruğuna bir başvuru bulunur.

Pulse, PulseAllve Wait yöntemleri eşitlenmiş bir kod bloğu içinden çağrılmalıdır.

Pulse yöntemi için yapılan açıklamalar, eğer bekleyen bir iş parçacığı yokken Pulse çağrılırsa ne olacağını açıklar.

Wait(Object, TimeSpan, Boolean) yöntemi

Bu yöntem, obj parametresi üzerinde özel kilidi yeniden alana kadar tamamlanmaz.

Şu anda belirtilen nesnedeki kilidin sahibi olan iş parçacığı, nesneyi başka bir iş parçacığının erişebilmesi için serbest bırakmak için bu yöntemi çağırır. Arayan, kilidi yeniden almak için beklerken engellenir. Çağıranın başka bir iş parçacığının işlemlerinin sonucu olarak gerçekleşecek durum değişikliğini beklemesi gerektiğinde bu yöntem çağrılır.

Zaman aşımı, başka bir iş parçacığı Pulse veya PulseAll yöntemini çağırmadan kilidi serbest bırakırsa, mevcut iş parçacığının süresiz olarak engellenmemesini sağlar. Ayrıca iş parçacığını hazır kuyruğa taşır ve bekleme kuyruğunda önündeki diğer iş parçacıklarını atlayarak kilidi daha erken yeniden alabilir. İş parçacığı, kilidi zaman aşımından önce yeniden alıp almadığını belirlemek için Wait yönteminin dönüş değerini kontrol edebilir. İş parçacığı beklemeye yol açan koşulları değerlendirebilir ve gerekirse yeniden Wait yöntemini çağırabilir.

Bir iş parçacığı Wait’yi çağırdığında, kilidi serbest bırakır ve bekleme kuyruğuna girer. Bu noktada, hazır kuyruktaki bir sonraki iş parçacığının (varsa) kilidin denetimini almasına izin verilir. Çağrılan Wait iş parçacığı, kilidi tutan bir iş parçacığı çağırana PulseAllkadar bekleme kuyruğunda kalır veya kuyrukta bir sonraki iş parçacığıdır ve kilidi tutan bir iş parçacığı çağırır Pulse. Ancak, başka bir iş parçacığı bu nesnenin timeout veya Pulse yöntemini çağırmadan önce PulseAll milisaniye geçerse, özgün iş parçacığı kilidi yeniden kazanmak için hazır kuyruğa taşınır.

Note

TimeSpan parametresi için -1 milisaniyeyi temsil eden bir timeout belirtilirse, kilit sahibi Pulse veya PulseAll çağrısını yapmadığı sürece bu yöntem süresiz olarak bekler. Eğer timeout 0 milisaniye ise, Wait'yi çağıran iş parçacığı kilidi serbest bırakır ve ardından kilidi yeniden kazanmak için hemen hazır kuyruğuna girer.

Belirtilen nesne için Wait kaç kez çağrılmış olursa olsun, çağıran Enter işlemini bir kez gerçekleştirir. Kavramsal olarak, Wait yöntemi, çağıranın nesnede Enter kaç kez çağrıldığını depolar ve kilitli nesneyi tamamen serbest bırakmak için gerektiği kadar Exit çağrılır. Çağıran daha sonra nesneyi yeniden almak için beklerken engeller. Çağrı yapan kilidi yeniden edindiğinde, sistem, arayan için kaydedilen Enter sayıyı geri yüklemek için gerektiği kadar çok kez Enter çağırır. Çağrısı Wait yalnızca belirtilen nesnenin kilidini serbest bırakır; çağıran diğer nesnelerdeki kilitlerin sahibiyse, bu kilitler serbest bırakılmaz.

Note

Eşitlenmiş bir nesne, çeşitli başvurular içerir: Bunlar arasında, kilidi şu anda elinde tutan iş parçacığına bir başvuru, kilidi almaya hazır olan iş parçacıklarını içeren hazır kuyruğa bir başvuru ve nesnenin durumundaki bir değişikliğin bildirimini bekleyen iş parçacıklarını içeren bekleme kuyruğuna bir başvuru bulunur.

Pulse, PulseAllve Wait yöntemleri eşitlenmiş bir kod bloğu içinden çağrılmalıdır.

Pulse yöntemi için yapılan açıklamalar, eğer bekleyen bir iş parçacığı yokken Pulse çağrılırsa ne olacağını açıklar.

Bağlamdan çık

exitContext yöntemi, bilinmeyen bir yönetilen bağlamın Wait içinden çağrılmadığı sürece parametresinin hiçbir etkisi yoktur. Bu durum, iş parçacığınız ContextBoundObject öğesinden türetilen bir sınıfın örneğine yönelik bir çağrının içindeyse oluşabilir. Şu anda ContextBoundObject gibi sınıftan türetilmemiş bir sınıfta, String gibi bir yöntem yürütüyor olsanız bile, eğer geçerli uygulama etki alanındaki yığında bir ContextBoundObject varsa, varsayılan olmayan bir bağlamda olabilirsiniz.

Kodunuz varsayılan olmayan bir bağlamda yürütülürken, öğesinin trueexitContext olarak belirtilmesi, Wait yöntemini yürütmeden önce iş parçacığının varsayılan olmayan yönetilen bağlamdan çıkıp varsayılan bağlama geçmesine neden olur. Yöntemine yapılan çağrı Wait tamamlandıktan sonra orijinal varsayılan olmayan bağlama döner.

Bağlama bağlı sınıfa SynchronizationAttribute özniteliği uygulandığında bu faydalı olabilir. Bu durumda, sınıfın üyelerine yapılan tüm çağrılar otomatik olarak eşitlenir ve eşitleme etki alanı sınıfın kod gövdesinin tamamıdır. Bir üyenin çağrı yığınındaki kod, Wait yöntemini çağırır ve true için exitContext belirtirse, iş parçacığı eşitleme etki alanından çıkar ve nesnenin herhangi bir üyesine yapılan bir çağrı üzerinde engellenmiş olan bir iş parçacığının devam etmesine olanak tanır. Yöntem Wait döndüğünde, çağrıyı yapan iş parçacığının senkronizasyon alanına yeniden girmek için beklemesi gerekir.

Ayrıca bkz.

Şunlara uygulanır

Wait(Object)

Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller.

public:
 static bool Wait(System::Object ^ obj);
public static bool Wait(object obj);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj);
static member Wait : obj -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj -> bool
Public Shared Function Wait (obj As Object) As Boolean

Parametreler

obj
Object

Üzerinde bekleyebileceğiniz nesne.

Döndürülenler

true çağıran belirtilen nesnenin kilidini yeniden aldığından çağrı döndürüldüyse. Kilit yeniden alınmazsa bu yöntem döndürülmüyor.

Öznitelikler

Özel durumlar

obj parametresi null'dir.

Çağıran iş parçacığı belirtilen nesnenin kilidine sahip değil.

Çağıran Wait iş parçacığı daha sonra bekleme durumundan kesilir. Başka bir iş parçacığı bu iş parçacığının Interrupt() yöntemini çağırdığında bu durum ortaya çıkar.

Açıklamalar

Şu anda belirtilen nesnedeki kilidin sahibi olan iş parçacığı, nesneyi başka bir iş parçacığının erişebilmesi için serbest bırakmak için bu yöntemi çağırır. Arayan, kilidi yeniden almak için beklerken engellenir. Çağıranın başka bir iş parçacığının işlemlerinin sonucu olarak gerçekleşecek durum değişikliğini beklemesi gerektiğinde bu yöntem çağrılır.

bir iş parçacığı çağırdığında Waitnesne üzerindeki kilidi serbest bırakır ve nesnenin bekleme kuyruğuna girer. Nesnenin hazır kuyruğundaki bir sonraki iş parçacığı (varsa) kilidi alır ve nesnenin özel kullanımına sahiptir. Çağıran Wait tüm iş parçacıkları, kilidin sahibi tarafından gönderilen veya Pulse'den PulseAll bir sinyal alınana kadar bekleme kuyruğunda kalır. Gönderilirse Pulse , yalnızca bekleme kuyruğunun başındaki iş parçacığı etkilenir. Gönderilirse PulseAll , nesneyi bekleyen tüm iş parçacıkları etkilenir. Sinyal alındığında, bir veya daha fazla iş parçacığı bekleme kuyruğundan çıkar ve hazır kuyruğu girer. Hazır kuyruktaki bir iş parçacığının kilidi yeniden almasına izin verilir.

Çağıran iş parçacığı nesne üzerindeki kilidi yeniden alırsa bu yöntem döndürür. Bu yöntemin, kilidin tutucusu veya Pulseçağrısı PulseAll yapmazsa süresiz olarak engellediğini unutmayın.

Belirtilen nesne için Wait kaç kez çağrılmış olursa olsun, çağıran Enter işlemini bir kez gerçekleştirir. Kavramsal olarak, Wait yöntemi, çağıranın nesnede Enter kaç kez çağrıldığını depolar ve kilitli nesneyi tamamen serbest bırakmak için gerektiği kadar Exit çağrılır. Çağıran daha sonra nesneyi yeniden almak için beklerken engeller. Çağrı yapan kilidi yeniden edindiğinde, sistem, arayan için kaydedilen Enter sayıyı geri yüklemek için gerektiği kadar çok kez Enter çağırır. Çağrısı Wait yalnızca belirtilen nesnenin kilidini serbest bırakır; çağıran diğer nesnelerdeki kilitlerin sahibiyse, bu kilitler serbest bırakılmaz.

Eşitlenmiş bir nesnenin, kilit tutan iş parçacığına başvuru, kilidi almaya hazır iş parçacıklarını içeren hazır kuyruğa başvuru ve nesnenin durumunda bir değişiklik bildirimi bekleyen iş parçacıklarını içeren bekleme kuyruğu başvurusu gibi çeşitli başvuruları içerdiğini unutmayın.

Pulse, PulseAllve Wait yöntemleri eşitlenmiş bir kod bloğu içinden çağrılmalıdır.

Pulse yöntemi için yapılan açıklamalar, eğer bekleyen bir iş parçacığı yokken Pulse çağrılırsa ne olacağını açıklar.

Ayrıca bkz.

Şunlara uygulanır

Wait(Object, Int32)

Kaynak:
Monitor.CoreCLR.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.CoreCLR.cs
Kaynak:
Monitor.CoreCLR.cs
Kaynak:
Monitor.CoreCLR.cs

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller. Belirtilen zaman aşımı aralığı ularsa, iş parçacığı hazır kuyruğa girer.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout);
public static bool Wait(object obj, int millisecondsTimeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, int millisecondsTimeout);
static member Wait : obj * int -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * int -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer) As Boolean

Parametreler

obj
Object

Üzerinde bekleyebileceğiniz nesne.

millisecondsTimeout
Int32

İş parçacığının hazır kuyruğa girmesi için beklenen milisaniye sayısı.

Döndürülenler

true belirtilen süre dolmadan önce kilit yeniden alındıysa; false belirtilen süre geçtikten sonra kilit yeniden alındıysa. Yöntem, kilit yeniden alınana kadar döndürülmüyor.

Öznitelikler

Özel durumlar

obj parametresi null'dir.

Çağıran iş parçacığı belirtilen nesnenin kilidine sahip değil.

Çağıran Wait iş parçacığı daha sonra bekleme durumundan kesilir. Başka bir iş parçacığı bu iş parçacığının Interrupt() yöntemini çağırdığında bu durum ortaya çıkar.

parametresinin millisecondsTimeout değeri negatiftir ve değerine Infiniteeşit değildir.

Açıklamalar

Bu yöntem, obj parametresi üzerinde özel kilidi yeniden alana kadar tamamlanmaz.

Şu anda belirtilen nesnedeki kilidin sahibi olan iş parçacığı, nesneyi başka bir iş parçacığının erişebilmesi için serbest bırakmak için bu yöntemi çağırır. Arayan, kilidi yeniden almak için beklerken engellenir. Çağıranın başka bir iş parçacığının işlemlerinin sonucu olarak gerçekleşecek durum değişikliğini beklemesi gerektiğinde bu yöntem çağrılır.

Zaman aşımı, başka bir iş parçacığı Pulse veya PulseAll yöntemini çağırmadan kilidi serbest bırakırsa, mevcut iş parçacığının süresiz olarak engellenmemesini sağlar. Ayrıca iş parçacığını hazır kuyruğa taşır ve bekleme kuyruğunda önündeki diğer iş parçacıklarını atlayarak kilidi daha erken yeniden alabilir. İş parçacığı, kilidi zaman aşımından önce yeniden alıp almadığını belirlemek için Wait yönteminin dönüş değerini kontrol edebilir. İş parçacığı beklemeye yol açan koşulları değerlendirebilir ve gerekirse yeniden Wait yöntemini çağırabilir.

bir iş parçacığı çağırdığında Waitnesne üzerindeki kilidi serbest bırakır ve nesnenin bekleme kuyruğuna girer. Nesnenin hazır kuyruğundaki bir sonraki iş parçacığı (varsa) kilidi alır ve nesnenin özel kullanımına sahiptir. Çağrılan Wait iş parçacığı, kilidi tutan bir iş parçacığı çağırana PulseAllkadar bekleme kuyruğunda kalır veya kuyrukta bir sonraki iş parçacığıdır ve kilidi tutan bir iş parçacığı çağırır Pulse. Ancak, başka bir iş parçacığı bu nesnenin millisecondsTimeout veya Pulse yöntemini çağırmadan önce PulseAll süresi dolarsa, özgün iş parçacığı kilidi yeniden kazanmak için hazır kuyruğuna taşınır.

Note

Infinite parametresi için belirtilirse, kilit sahibi millisecondsTimeout ya da Pulse çağrısını yapmadığı sürece, bu yöntem süresiz olarak PulseAll engel olur. Eğer millisecondsTimeout sıfıra eşitse, Wait çağıran iş parçacığı kilidi serbest bırakır ve kilidi yeniden kazanmak için hemen hazır kuyruğa girer.

Belirtilen nesne için Wait kaç kez çağrılmış olursa olsun, çağıran Enter işlemini bir kez gerçekleştirir. Kavramsal olarak, Wait yöntemi, çağıranın nesnede Enter kaç kez çağrıldığını depolar ve kilitli nesneyi tamamen serbest bırakmak için gerektiği kadar Exit çağrılır. Çağıran daha sonra nesneyi yeniden almak için beklerken engeller. Çağrı yapan kilidi yeniden edindiğinde, sistem, arayan için kaydedilen Enter sayıyı geri yüklemek için gerektiği kadar çok kez Enter çağırır. Çağrısı Wait yalnızca belirtilen nesnenin kilidini serbest bırakır; çağıran diğer nesnelerdeki kilitlerin sahibiyse, bu kilitler serbest bırakılmaz.

Note

Eşitlenmiş bir nesne, çeşitli başvurular içerir: Bunlar arasında, kilidi şu anda elinde tutan iş parçacığına bir başvuru, kilidi almaya hazır olan iş parçacıklarını içeren hazır kuyruğa bir başvuru ve nesnenin durumundaki bir değişikliğin bildirimini bekleyen iş parçacıklarını içeren bekleme kuyruğuna bir başvuru bulunur.

Pulse, PulseAllve Wait yöntemleri eşitlenmiş bir kod bloğu içinden çağrılmalıdır.

Pulse yöntemi için yapılan açıklamalar, eğer bekleyen bir iş parçacığı yokken Pulse çağrılırsa ne olacağını açıklar.

Ayrıca bkz.

Şunlara uygulanır

Wait(Object, TimeSpan)

Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller. Belirtilen zaman aşımı aralığı ularsa, iş parçacığı hazır kuyruğa girer.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout);
public static bool Wait(object obj, TimeSpan timeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, TimeSpan timeout);
static member Wait : obj * TimeSpan -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan) As Boolean

Parametreler

obj
Object

Üzerinde bekleyebileceğiniz nesne.

timeout
TimeSpan

İş TimeSpan parçacığı hazır kuyruğa girmeden önce beklenmesi gereken süreyi temsil eden bir.

Döndürülenler

true belirtilen süre dolmadan önce kilit yeniden alındıysa; false belirtilen süre geçtikten sonra kilit yeniden alındıysa. Yöntem, kilit yeniden alınana kadar döndürülmüyor.

Öznitelikler

Özel durumlar

obj parametresi null'dir.

Çağıran iş parçacığı belirtilen nesnenin kilidine sahip değil.

Çağıran Wait iş parçacığı daha sonra bekleme durumundan kesilir. Başka bir iş parçacığı bu iş parçacığının Interrupt() yöntemini çağırdığında bu durum ortaya çıkar.

Parametrenin timeout milisaniye cinsinden değeri negatiftir ve temsil Infinite etmez (-1 milisaniye) veya Int32.MaxValue değerinden büyüktür.

Açıklamalar

Bu yöntem, obj parametresi üzerinde özel kilidi yeniden alana kadar tamamlanmaz.

Şu anda belirtilen nesnedeki kilidin sahibi olan iş parçacığı, nesneyi başka bir iş parçacığının erişebilmesi için serbest bırakmak için bu yöntemi çağırır. Arayan, kilidi yeniden almak için beklerken engellenir. Çağıranın başka bir iş parçacığının işlemlerinin sonucu olarak gerçekleşecek durum değişikliğini beklemesi gerektiğinde bu yöntem çağrılır.

Zaman aşımı, başka bir iş parçacığı Pulse veya PulseAll yöntemini çağırmadan kilidi serbest bırakırsa, mevcut iş parçacığının süresiz olarak engellenmemesini sağlar. Ayrıca iş parçacığını hazır kuyruğa taşır ve bekleme kuyruğunda önündeki diğer iş parçacıklarını atlayarak kilidi daha erken yeniden alabilir. İş parçacığı, kilidi zaman aşımından önce yeniden alıp almadığını belirlemek için Wait yönteminin dönüş değerini kontrol edebilir. İş parçacığı beklemeye yol açan koşulları değerlendirebilir ve gerekirse yeniden Wait yöntemini çağırabilir.

bir iş parçacığı çağırdığında Waitnesne üzerindeki kilidi serbest bırakır ve nesnenin bekleme kuyruğuna girer. Nesnenin hazır kuyruğundaki bir sonraki iş parçacığı (varsa) kilidi alır ve nesnenin özel kullanımına sahiptir. Çağrılan Wait iş parçacığı, kilidi tutan bir iş parçacığı çağırana PulseAllkadar bekleme kuyruğunda kalır veya kuyrukta bir sonraki iş parçacığıdır ve kilidi tutan bir iş parçacığı çağırır Pulse. Ancak, başka bir iş parçacığı bu nesnenin timeout veya Pulse yöntemini çağırmadan önce PulseAll süresi dolarsa, özgün iş parçacığı kilidi yeniden kazanmak için hazır kuyruğuna taşınır.

Note

TimeSpan parametresi için -1 milisaniyeyi temsil eden bir timeout belirtilirse, kilit sahibi Pulse veya PulseAll çağrısını yapmadığı sürece bu yöntem süresiz olarak bekler. Eğer timeout 0 milisaniye ise, Wait'yi çağıran iş parçacığı kilidi serbest bırakır ve ardından kilidi yeniden kazanmak için hemen hazır kuyruğuna girer.

Belirtilen nesne için Wait kaç kez çağrılmış olursa olsun, çağıran Enter işlemini bir kez gerçekleştirir. Kavramsal olarak, Wait yöntemi, çağıranın nesnede Enter kaç kez çağrıldığını depolar ve kilitli nesneyi tamamen serbest bırakmak için gerektiği kadar Exit çağrılır. Çağıran daha sonra nesneyi yeniden almak için beklerken engeller. Çağrı yapan kilidi yeniden edindiğinde, sistem, arayan için kaydedilen Enter sayıyı geri yüklemek için gerektiği kadar çok kez Enter çağırır. Çağrısı Wait yalnızca belirtilen nesnenin kilidini serbest bırakır; çağıran diğer nesnelerdeki kilitlerin sahibiyse, bu kilitler serbest bırakılmaz.

Note

Eşitlenmiş bir nesne, çeşitli başvurular içerir: Bunlar arasında, kilidi şu anda elinde tutan iş parçacığına bir başvuru, kilidi almaya hazır olan iş parçacıklarını içeren hazır kuyruğa bir başvuru ve nesnenin durumundaki bir değişikliğin bildirimini bekleyen iş parçacıklarını içeren bekleme kuyruğuna bir başvuru bulunur.

Pulse, PulseAllve Wait yöntemleri eşitlenmiş bir kod bloğu içinden çağrılmalıdır.

Pulse yöntemi için yapılan açıklamalar, eğer bekleyen bir iş parçacığı yokken Pulse çağrılırsa ne olacağını açıklar.

Ayrıca bkz.

Şunlara uygulanır

Wait(Object, TimeSpan, Boolean)

Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs
Kaynak:
Monitor.cs

Bir nesne üzerindeki kilidi serbest bırakır ve kilidi yeniden alana kadar geçerli iş parçacığını engeller. Belirtilen zaman aşımı aralığı ularsa, iş parçacığı hazır kuyruğa girer. İsteğe bağlı olarak, beklemeden önce eşitlenen bağlam için eşitleme etki alanından çıkar ve etki alanını daha sonra yeniden alır.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, TimeSpan timeout, bool exitContext);
public static bool Wait(object obj, TimeSpan timeout, bool exitContext);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan * bool -> bool
static member Wait : obj * TimeSpan * bool -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan, exitContext As Boolean) As Boolean

Parametreler

obj
Object

Üzerinde bekleyebileceğiniz nesne.

timeout
TimeSpan

İş TimeSpan parçacığı hazır kuyruğa girmeden önce beklenmesi gereken süreyi temsil eden bir.

exitContext
Boolean

true beklemeden önce bağlam (eşitlenmiş bir bağlamdaysa) için eşitleme etki alanından çıkmak ve yeniden almak; aksi takdirde , false.

Döndürülenler

true belirtilen süre dolmadan önce kilit yeniden alındıysa; false belirtilen süre geçtikten sonra kilit yeniden alındıysa. Yöntem, kilit yeniden alınana kadar döndürülmüyor.

Öznitelikler

Özel durumlar

obj parametresi null'dir.

Wait eşitlenmiş bir kod bloğu içinden çağrılmıyor.

Wait çağıran iş parçacığı daha sonra bekleme durumundan kesilir. Başka bir iş parçacığı bu iş parçacığının Interrupt() yöntemini çağırdığında bu durum ortaya çıkar.

timeout Parametresi negatiftir ve temsil etmez Infinite (-1 milisaniye) veya Int32.MaxValue değerinden büyüktür.

Açıklamalar

Wait(Object, Int32, Boolean) yöntemi

Bu yöntem, obj parametresi üzerinde özel kilidi yeniden alana kadar tamamlanmaz.

Şu anda belirtilen nesnedeki kilidin sahibi olan iş parçacığı, nesneyi başka bir iş parçacığının erişebilmesi için serbest bırakmak için bu yöntemi çağırır. Arayan, kilidi yeniden almak için beklerken engellenir. Çağıranın başka bir iş parçacığının işlemlerinin sonucu olarak gerçekleşecek durum değişikliğini beklemesi gerektiğinde bu yöntem çağrılır.

Zaman aşımı, başka bir iş parçacığı Pulse veya PulseAll yöntemini çağırmadan kilidi serbest bırakırsa, mevcut iş parçacığının süresiz olarak engellenmemesini sağlar. Ayrıca iş parçacığını hazır kuyruğa taşır ve bekleme kuyruğunda önündeki diğer iş parçacıklarını atlayarak kilidi daha erken yeniden alabilir. İş parçacığı, kilidi zaman aşımından önce yeniden alıp almadığını belirlemek için Wait yönteminin dönüş değerini kontrol edebilir. İş parçacığı beklemeye yol açan koşulları değerlendirebilir ve gerekirse yeniden Wait yöntemini çağırabilir.

Bir iş parçacığı Wait’yi çağırdığında, kilidi serbest bırakır ve bekleme kuyruğuna girer. Bu noktada, hazır kuyruktaki bir sonraki iş parçacığının (varsa) kilidin denetimini almasına izin verilir. Çağrılan Wait iş parçacığı, kilidi tutan bir iş parçacığı çağırana PulseAllkadar bekleme kuyruğunda kalır veya kuyrukta bir sonraki iş parçacığıdır ve kilidi tutan bir iş parçacığı çağırır Pulse. Ancak, başka bir iş parçacığı bu nesnenin millisecondsTimeout veya Pulse yöntemini çağırmadan önce PulseAll süresi dolarsa, özgün iş parçacığı kilidi yeniden kazanmak için hazır kuyruğuna taşınır.

Note

Infinite parametresi için belirtilirse, kilit sahibi millisecondsTimeout ya da Pulse çağrısını yapmadığı sürece, bu yöntem süresiz olarak PulseAll engel olur. Eğer millisecondsTimeout sıfıra eşitse, Wait çağıran iş parçacığı kilidi serbest bırakır ve kilidi yeniden kazanmak için hemen hazır kuyruğa girer.

Belirtilen nesne için Wait kaç kez çağrılmış olursa olsun, çağıran Enter işlemini bir kez gerçekleştirir. Kavramsal olarak, Wait yöntemi, çağıranın nesnede Enter kaç kez çağrıldığını depolar ve kilitli nesneyi tamamen serbest bırakmak için gerektiği kadar Exit çağrılır. Çağıran daha sonra nesneyi yeniden almak için beklerken engeller. Çağrı yapan kilidi yeniden edindiğinde, sistem, arayan için kaydedilen Enter sayıyı geri yüklemek için gerektiği kadar çok kez Enter çağırır. Çağrısı Wait yalnızca belirtilen nesnenin kilidini serbest bırakır; çağıran diğer nesnelerdeki kilitlerin sahibiyse, bu kilitler serbest bırakılmaz.

Note

Eşitlenmiş bir nesne, çeşitli başvurular içerir: Bunlar arasında, kilidi şu anda elinde tutan iş parçacığına bir başvuru, kilidi almaya hazır olan iş parçacıklarını içeren hazır kuyruğa bir başvuru ve nesnenin durumundaki bir değişikliğin bildirimini bekleyen iş parçacıklarını içeren bekleme kuyruğuna bir başvuru bulunur.

Pulse, PulseAllve Wait yöntemleri eşitlenmiş bir kod bloğu içinden çağrılmalıdır.

Pulse yöntemi için yapılan açıklamalar, eğer bekleyen bir iş parçacığı yokken Pulse çağrılırsa ne olacağını açıklar.

Wait(Object, TimeSpan, Boolean) yöntemi

Bu yöntem, obj parametresi üzerinde özel kilidi yeniden alana kadar tamamlanmaz.

Şu anda belirtilen nesnedeki kilidin sahibi olan iş parçacığı, nesneyi başka bir iş parçacığının erişebilmesi için serbest bırakmak için bu yöntemi çağırır. Arayan, kilidi yeniden almak için beklerken engellenir. Çağıranın başka bir iş parçacığının işlemlerinin sonucu olarak gerçekleşecek durum değişikliğini beklemesi gerektiğinde bu yöntem çağrılır.

Zaman aşımı, başka bir iş parçacığı Pulse veya PulseAll yöntemini çağırmadan kilidi serbest bırakırsa, mevcut iş parçacığının süresiz olarak engellenmemesini sağlar. Ayrıca iş parçacığını hazır kuyruğa taşır ve bekleme kuyruğunda önündeki diğer iş parçacıklarını atlayarak kilidi daha erken yeniden alabilir. İş parçacığı, kilidi zaman aşımından önce yeniden alıp almadığını belirlemek için Wait yönteminin dönüş değerini kontrol edebilir. İş parçacığı beklemeye yol açan koşulları değerlendirebilir ve gerekirse yeniden Wait yöntemini çağırabilir.

Bir iş parçacığı Wait’yi çağırdığında, kilidi serbest bırakır ve bekleme kuyruğuna girer. Bu noktada, hazır kuyruktaki bir sonraki iş parçacığının (varsa) kilidin denetimini almasına izin verilir. Çağrılan Wait iş parçacığı, kilidi tutan bir iş parçacığı çağırana PulseAllkadar bekleme kuyruğunda kalır veya kuyrukta bir sonraki iş parçacığıdır ve kilidi tutan bir iş parçacığı çağırır Pulse. Ancak, başka bir iş parçacığı bu nesnenin timeout veya Pulse yöntemini çağırmadan önce PulseAll milisaniye geçerse, özgün iş parçacığı kilidi yeniden kazanmak için hazır kuyruğa taşınır.

Note

TimeSpan parametresi için -1 milisaniyeyi temsil eden bir timeout belirtilirse, kilit sahibi Pulse veya PulseAll çağrısını yapmadığı sürece bu yöntem süresiz olarak bekler. Eğer timeout 0 milisaniye ise, Wait'yi çağıran iş parçacığı kilidi serbest bırakır ve ardından kilidi yeniden kazanmak için hemen hazır kuyruğuna girer.

Belirtilen nesne için Wait kaç kez çağrılmış olursa olsun, çağıran Enter işlemini bir kez gerçekleştirir. Kavramsal olarak, Wait yöntemi, çağıranın nesnede Enter kaç kez çağrıldığını depolar ve kilitli nesneyi tamamen serbest bırakmak için gerektiği kadar Exit çağrılır. Çağıran daha sonra nesneyi yeniden almak için beklerken engeller. Çağrı yapan kilidi yeniden edindiğinde, sistem, arayan için kaydedilen Enter sayıyı geri yüklemek için gerektiği kadar çok kez Enter çağırır. Çağrısı Wait yalnızca belirtilen nesnenin kilidini serbest bırakır; çağıran diğer nesnelerdeki kilitlerin sahibiyse, bu kilitler serbest bırakılmaz.

Note

Eşitlenmiş bir nesne, çeşitli başvurular içerir: Bunlar arasında, kilidi şu anda elinde tutan iş parçacığına bir başvuru, kilidi almaya hazır olan iş parçacıklarını içeren hazır kuyruğa bir başvuru ve nesnenin durumundaki bir değişikliğin bildirimini bekleyen iş parçacıklarını içeren bekleme kuyruğuna bir başvuru bulunur.

Pulse, PulseAllve Wait yöntemleri eşitlenmiş bir kod bloğu içinden çağrılmalıdır.

Pulse yöntemi için yapılan açıklamalar, eğer bekleyen bir iş parçacığı yokken Pulse çağrılırsa ne olacağını açıklar.

Bağlamdan çık

exitContext yöntemi, bilinmeyen bir yönetilen bağlamın Wait içinden çağrılmadığı sürece parametresinin hiçbir etkisi yoktur. Bu durum, iş parçacığınız ContextBoundObject öğesinden türetilen bir sınıfın örneğine yönelik bir çağrının içindeyse oluşabilir. Şu anda ContextBoundObject gibi sınıftan türetilmemiş bir sınıfta, String gibi bir yöntem yürütüyor olsanız bile, eğer geçerli uygulama etki alanındaki yığında bir ContextBoundObject varsa, varsayılan olmayan bir bağlamda olabilirsiniz.

Kodunuz varsayılan olmayan bir bağlamda yürütülürken, öğesinin trueexitContext olarak belirtilmesi, Wait yöntemini yürütmeden önce iş parçacığının varsayılan olmayan yönetilen bağlamdan çıkıp varsayılan bağlama geçmesine neden olur. Yöntemine yapılan çağrı Wait tamamlandıktan sonra orijinal varsayılan olmayan bağlama döner.

Bağlama bağlı sınıfa SynchronizationAttribute özniteliği uygulandığında bu faydalı olabilir. Bu durumda, sınıfın üyelerine yapılan tüm çağrılar otomatik olarak eşitlenir ve eşitleme etki alanı sınıfın kod gövdesinin tamamıdır. Bir üyenin çağrı yığınındaki kod, Wait yöntemini çağırır ve true için exitContext belirtirse, iş parçacığı eşitleme etki alanından çıkar ve nesnenin herhangi bir üyesine yapılan bir çağrı üzerinde engellenmiş olan bir iş parçacığının devam etmesine olanak tanır. Yöntem Wait döndüğünde, çağrıyı yapan iş parçacığının senkronizasyon alanına yeniden girmek için beklemesi gerekir.

Ayrıca bkz.

Şunlara uygulanır