Monitor.Wait 方法

定義

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。

多載

Wait(Object, Int32, Boolean)

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。 如果超過指定的逾時間隔時間,執行緒會進入就緒序列。 這個方法也會指定等候之前和重新取得之後,是否要離開內容 (Context) 的同步處理領域 (如果在同步化內容中的話)。

Wait(Object)

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。

Wait(Object, Int32)

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。 如果超過指定的逾時間隔時間,執行緒會進入就緒序列。

Wait(Object, TimeSpan)

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。 如果超過指定的逾時間隔時間,執行緒會進入就緒序列。

Wait(Object, TimeSpan, Boolean)

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。 如果超過指定的逾時間隔時間,執行緒會進入就緒序列。 在等候之前和重新取得領域之後,可選擇性地結束同步化內容的同步處理領域。

Wait(Object, Int32, Boolean)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。 如果超過指定的逾時間隔時間,執行緒會進入就緒序列。 這個方法也會指定等候之前和重新取得之後,是否要離開內容 (Context) 的同步處理領域 (如果在同步化內容中的話)。

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

參數

obj
Object

要等候的物件。

millisecondsTimeout
Int32

在執行緒進入就緒佇列之前要等候的毫秒數。

exitContext
Boolean

在等候前離開內容的同步化領域 (如果在同步化內容中) 並重新取得它,則為 true;否則為 false

傳回

如果在經過指定的時間之前重新取得鎖定,則為 true;如果在經過指定的時間之後重新取得鎖定,則為 false。 要等到重新取得鎖定之後,此方法才會傳回。

屬性

例外狀況

obj 參數為 null

Wait 不是從同步處理的程式碼區塊中呼叫。

叫用 Wait 的執行緒稍後會從等候狀態被插斷。 當另一個執行緒呼叫此執行緒的 Interrupt() 方法時,就會發生此狀況。

millisecondsTimeout 參數的值為負,且不等於 Infinite

備註

如需此 API 的詳細資訊,請參閱 Monitor.Wait 的補充 API 備註

另請參閱

適用於

Wait(Object)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。

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

參數

obj
Object

要等候的物件。

傳回

如果因為呼叫端重新取得指定物件的鎖定所以呼叫被傳回,則為 true。 如果鎖定不被重新取得,則這個方法不會傳回。

屬性

例外狀況

obj 參數為 null

呼叫執行緒沒有指定物件的鎖定。

叫用 Wait 的執行緒稍後會從等候狀態被插斷。 當另一個執行緒呼叫此執行緒的 Interrupt() 方法時,就會發生此狀況。

備註

目前擁有指定物件鎖定的線程會叫用這個方法,以便釋放物件,讓另一個線程可以存取它。 在等候重新取得鎖定時,呼叫端會遭到封鎖。 當呼叫端需要等候因另一個線程作業而發生的狀態變更時,就會呼叫這個方法。

當線程呼叫 Wait時,它會釋放 對象的鎖定,並輸入物件的等候佇列。 物件就緒佇列中的下一個線程 (如果有一個) 取得鎖定,且具有對象的獨佔用途。 呼叫Wait的所有線程都會保留在等候佇列中,直到他們收到來自 或PulseAll的訊Pulse號,由鎖定的擁有者傳送。 如果 Pulse 已傳送,則只會影響等候佇列前端的線程。 如果 PulseAll 已傳送,則等候物件的所有線程都會受到影響。 收到訊號時,一或多個線程會離開等候佇列,並輸入就緒的佇列。 允許就緒佇列中的線程重新取得鎖定。

這個方法會在呼叫線程重新取得 對象的鎖定時傳回。 請注意,如果鎖定的持有者未呼叫 PulsePulseAll,這個方法會無限期地封鎖 。

呼叫端會 Wait 執行一次,不論已針對指定的物件叫用次數 Enter 為何。 在概念上, Wait 方法會儲存呼叫端在 物件上叫用 Enter 的次數,並 Exit 視需要叫用多次來完全釋放鎖定的物件。 呼叫端接著會在等候重新取得物件時封鎖。 當呼叫端重新取得鎖定時,系統會 Enter 視需要呼叫多次呼叫,以還原呼叫端的已儲存 Enter 計數。 呼叫 Wait 只會釋放指定對象的鎖定;如果呼叫端是其他對象的鎖定擁有者,則不會釋放這些鎖定。

請注意,同步處理的物件會保存數個參考,包括目前保存鎖定的線程參考、就緒佇列的參考,其中包含準備好取得鎖定的線程,以及等候佇列的參考,其中包含正在等候物件狀態變更通知的線程。

Pulse必須在已同步處理的程式代碼區塊內叫用、 PulseAllWait 方法。

方法的 Pulse 備註說明當 Pulse 沒有線程正在等候時呼叫會發生什麼情況。

另請參閱

適用於

Wait(Object, Int32)

Source:
Monitor.CoreCLR.cs
Source:
Monitor.CoreCLR.cs
Source:
Monitor.CoreCLR.cs

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。 如果超過指定的逾時間隔時間,執行緒會進入就緒序列。

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

參數

obj
Object

要等候的物件。

millisecondsTimeout
Int32

在執行緒進入就緒佇列之前要等候的毫秒數。

傳回

如果在經過指定的時間之前重新取得鎖定,則為 true;如果在經過指定的時間之後重新取得鎖定,則為 false。 要等到重新取得鎖定之後,此方法才會傳回。

屬性

例外狀況

obj 參數為 null

呼叫執行緒沒有指定物件的鎖定。

叫用 Wait 的執行緒稍後會從等候狀態被插斷。 當另一個執行緒呼叫此執行緒的 Interrupt() 方法時,就會發生此狀況。

millisecondsTimeout 參數的值為負,且不等於 Infinite

備註

這個方法不會在參數上 obj 重新取得獨佔鎖定之前傳回。

目前擁有指定物件鎖定的線程會叫用這個方法,以便釋放物件,讓另一個線程可以存取它。 在等候重新取得鎖定時,呼叫端會遭到封鎖。 當呼叫端需要等候因另一個線程作業而發生的狀態變更時,就會呼叫這個方法。

逾時可確保如果另一個線程釋放鎖定而不先呼叫 PulsePulseAll 方法,則目前的線程不會無限期地封鎖。 它也會將線程移至就緒的佇列,並在等候佇列中略過其他線程,以便更快重新取得鎖定。 線程可以測試 方法的 Wait 傳回值,以判斷是否在逾時之前重新取得鎖定。線程可以評估導致其進入等候的條件,並視需要再次呼叫 Wait 方法。

當線程呼叫 Wait時,它會釋放 對象的鎖定,並輸入物件的等候佇列。 物件就緒佇列中的下一個線程 (如果有一個) 取得鎖定,且具有對象的獨佔用途。 叫用的線程會保留在等候佇列中,直到保留鎖定的線程 WaitPulseAll用為止,或者它是佇列中的下一個線程,以及保留鎖定的線程會叫用 Pulse。 不過,如果在 millisecondsTimeout 另一個線程叫用此物件的 PulsePulseAll 方法之前經過,原始線程會移至就緒佇列,以重新取得鎖定。

注意

如果 InfinitemillisecondsTimeout 參數指定 ,則除非鎖定 Pulse 呼叫的持有者或 PulseAll,否則這個方法會無限期地封鎖 。 如果 millisecondsTimeout 等於 0,則呼叫 Wait 的線程會釋放鎖定,然後立即進入就緒佇列,以重新取得鎖定。

呼叫端會 Wait 執行一次,不論已針對指定的物件叫用次數 Enter 為何。 在概念上, Wait 方法會儲存呼叫端在 物件上叫用 Enter 的次數,並 Exit 視需要叫用多次來完全釋放鎖定的物件。 呼叫端接著會在等候重新取得物件時封鎖。 當呼叫端重新取得鎖定時,系統會 Enter 視需要呼叫多次呼叫,以還原呼叫端的已儲存 Enter 計數。 呼叫 Wait 只會釋放指定對象的鎖定;如果呼叫端是其他對象的鎖定擁有者,則不會釋放這些鎖定。

注意

同步處理的物件會保存數個參考,包括目前保存鎖定的線程參考、就緒佇列的參考,其中包含準備好取得鎖定的線程,以及等候佇列的參考,其中包含正在等候物件狀態變更通知的線程。

Pulse必須在已同步處理的程式代碼區塊內叫用、 PulseAllWait 方法。

方法的 Pulse 備註說明當沒有線程正在等候時呼叫時會發生什麼情況 Pulse

另請參閱

適用於

Wait(Object, TimeSpan)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。 如果超過指定的逾時間隔時間,執行緒會進入就緒序列。

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

參數

obj
Object

要等候的物件。

timeout
TimeSpan

TimeSpan,代表在執行緒進入就緒佇列之前要等候的時間量。

傳回

如果在經過指定的時間之前重新取得鎖定,則為 true;如果在經過指定的時間之後重新取得鎖定,則為 false。 要等到重新取得鎖定之後,此方法才會傳回。

屬性

例外狀況

obj 參數為 null

呼叫執行緒沒有指定物件的鎖定。

叫用 Wait 的執行緒稍後會從等候狀態被插斷。 當另一個執行緒呼叫此執行緒的 Interrupt() 方法時,就會發生此狀況。

以毫秒為單位的參數 timeout 值為負數,而且不代表 Infinite (-1 毫秒) ,或大於 Int32.MaxValue

備註

這個方法在重新取得 參數的 obj 獨佔鎖定之前不會傳回。

目前擁有指定物件鎖定的線程會叫用這個方法,以釋放物件,讓另一個線程可以存取它。 呼叫端在等候重新取得鎖定時遭到封鎖。 當呼叫端需要等候因另一個線程的作業而發生的狀態變更時,就會呼叫這個方法。

逾時可確保如果另一個線程在沒有先呼叫 PulsePulseAll 方法的情況下釋放鎖定,目前的線程不會無限期地封鎖。 它也會將線程移至就緒的佇列,並在等候佇列中略過其他線程,以便更快重新取得鎖定。 線程可以測試 方法的 Wait 傳回值,以判斷是否在逾時之前重新取得鎖定。線程可以評估導致其進入等候的條件,並視需要再次呼叫 Wait 方法。

當線程呼叫 Wait時,它會釋放對象的鎖定,並進入物件的等候佇列。 物件就緒佇列中的下一個線程 (如果有一個) 取得鎖定,且具有對象的獨佔用法。 所叫 Wait 用的線程會保留在等候佇列中,直到保存鎖定 PulseAll的線程叫用 為止,或者它是佇列中的下一個線程,以及保留鎖定的線程會叫用 Pulse。 不過,如果在 timeout 另一個線程叫用此物件的 PulsePulseAll 方法之前經過,原始線程就會移至就緒佇列,以重新取得鎖定。

注意

TimeSpan如果為 參數指定代表 -1 毫秒的 timeout ,除非鎖定Pulse呼叫 的持有者或 PulseAll,否則這個方法會無限期地封鎖 。 如果 timeout 為 0 毫秒,則呼叫 Wait 的線程會釋放鎖定,然後立即進入就緒佇列,以重新取得鎖定。

呼叫端會 Wait 執行一次,而不論已針對指定的物件叫用次數 Enter 為何。 就概念上來說, Wait 方法會儲存呼叫端在 物件上叫 Enter 用的次數,並 Exit 視需要叫用多次來完全釋放鎖定的物件。 接著,呼叫端會在等候重新取得物件時封鎖 。 當呼叫端重新取得鎖定時,系統會視需要多次呼叫 Enter ,以還原呼叫端的已儲存 Enter 計數。 呼叫 Wait 只會釋放指定對象的鎖定;如果呼叫端是其他對象的鎖定擁有者,則不會釋放這些鎖定。

注意

同步處理的物件會保存數個參考,包括目前保存鎖定的線程參考、就緒佇列的參考,其中包含準備好取得鎖定的線程,以及等候佇列的參考,其中包含正在等候物件狀態變更通知的線程。

必須在 Pulse已同步的程式代碼區塊內叫用、 PulseAllWait 方法。

方法的 Pulse 備註說明當沒有線程正在等候時呼叫時會發生什麼情況 Pulse

另請參閱

適用於

Wait(Object, TimeSpan, Boolean)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

釋出物件的鎖並且封鎖目前的執行緒,直到這個執行緒重新取得鎖定為止。 如果超過指定的逾時間隔時間,執行緒會進入就緒序列。 在等候之前和重新取得領域之後,可選擇性地結束同步化內容的同步處理領域。

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

參數

obj
Object

要等候的物件。

timeout
TimeSpan

TimeSpan,代表在執行緒進入就緒佇列之前要等候的時間量。

exitContext
Boolean

在等候前離開內容的同步化領域 (如果在同步化內容中) 並重新取得它,則為 true;否則為 false

傳回

如果在經過指定的時間之前重新取得鎖定,則為 true;如果在經過指定的時間之後重新取得鎖定,則為 false。 要等到重新取得鎖定之後,此方法才會傳回。

屬性

例外狀況

obj 參數為 null

Wait 不是從同步處理的程式碼區塊中呼叫。

叫用 Wait 的執行緒稍後會從等候狀態中斷。 當另一個執行緒呼叫此執行緒的 Interrupt() 方法時,就會發生此狀況。

參數 timeout 為負數,且不代表 Infinite (-1 毫秒) ,或大於 Int32.MaxValue

備註

如需此 API 的詳細資訊,請參閱 Monitor.Wait 補充 API 備註

另請參閱

適用於