ReaderWriterLockSlim.TryEnterWriteLock 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
嘗試以選用的逾時,在寫入模式下進入鎖定狀態。
多載
TryEnterWriteLock(Int32) |
嘗試以選用的逾時,在寫入模式下進入鎖定狀態。 |
TryEnterWriteLock(TimeSpan) |
嘗試以選用的逾時,在寫入模式下進入鎖定狀態。 |
TryEnterWriteLock(Int32)
嘗試以選用的逾時,在寫入模式下進入鎖定狀態。
public:
bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock (int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean
參數
傳回
如果呼叫的執行緒已進入寫入模式,則為 true
,否則為 false
。
例外狀況
RecursionPolicy 屬性為 NoRecursion,且目前的執行緒已進入鎖定狀態。
-或-
目前執行緒一開始已進入讀取模式的鎖定狀態,因此嘗試進入寫入模式可能會造成死結。
-或-
遞迴的次數會超過計數器的容量。 限制過大,使應用程式永遠不會發生這個情形。
millisecondsTimeout
的值為負,但不等於 Infinite (-1),這是唯一允許的負值。
範例
下列範例示範如何使用 TryEnterWriteLock 方法,以逾時進入寫入模式的鎖定。範例中顯示的 方法會將新的索引鍵/值組新增至同步快取。 如果指定的逾時間隔線上程進入鎖定之前經過,此方法會傳 false
回 。 如果新增索引鍵/值組,方法會 true
傳回 。
如果索引鍵已經在快取中,則內部 Dictionary<TKey,TValue> 擲回的例外狀況允許終止 方法。
finally
區塊是用來執行 ExitWriteLock 方法,以確保呼叫端結束鎖定。
此程式碼是提供給 類別之較大範例的 ReaderWriterLockSlim 一部分。
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
Private cacheLock As New ReaderWriterLockSlim()
Private innerCache As New Dictionary(Of Integer, String)
public bool AddWithTimeout(int key, string value, int timeout)
{
if (cacheLock.TryEnterWriteLock(timeout))
{
try
{
innerCache.Add(key, value);
}
finally
{
cacheLock.ExitWriteLock();
}
return true;
}
else
{
return false;
}
}
Public Function AddWithTimeout(ByVal key As Integer, ByVal value As String, _
ByVal timeout As Integer) As Boolean
If cacheLock.TryEnterWriteLock(timeout) Then
Try
innerCache.Add(key, value)
Finally
cacheLock.ExitWriteLock()
End Try
Return True
Else
Return False
End If
End Function
備註
如果 millisecondsTimeout
為 0 (零) ,這個方法會檢查鎖定狀態,並在所需的狀態無法使用時立即傳回 false
。
如果其他執行緒在讀取模式中進入鎖定,則會呼叫 TryEnterWriteLock 方法的執行緒會封鎖,直到這些執行緒結束讀取模式,或直到逾時間隔經過為止。 當執行緒在等候進入寫入模式時,嘗試進入讀取模式或可升級模式區塊的其他執行緒,直到所有等候進入寫入模式的執行緒逾時或進入寫入模式,然後結束寫入模式為止。
注意
如果鎖定允許遞迴,在寫入模式中進入鎖定的執行緒可以遞迴進入寫入模式,即使其他執行緒正在等候進入寫入模式也一樣。
適用於
TryEnterWriteLock(TimeSpan)
嘗試以選用的逾時,在寫入模式下進入鎖定狀態。
public:
bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock (TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean
參數
- timeout
- TimeSpan
等待的間隔,或 -1 毫秒無限期等待。
傳回
如果呼叫的執行緒已進入寫入模式,則為 true
,否則為 false
。
例外狀況
RecursionPolicy 屬性為 NoRecursion,且目前的執行緒已進入鎖定狀態。
-或-
目前執行緒一開始已進入讀取模式的鎖定狀態,因此嘗試進入寫入模式可能會造成死結。
-或-
遞迴的次數會超過計數器的容量。 限制過大,使應用程式永遠不會發生這個情形。
備註
如果 timeout
為 0 (零) ,這個方法會檢查鎖定狀態,並在所需的狀態無法使用時立即傳回 false
。
如果其他執行緒在讀取模式中進入鎖定,則會呼叫 TryEnterWriteLock 方法的執行緒會封鎖,直到這些執行緒結束讀取模式,或直到逾時間隔經過為止。 當執行緒在等候進入寫入模式時,嘗試進入讀取模式或可升級模式區塊的其他執行緒,直到所有等候進入寫入模式的執行緒逾時或進入寫入模式,然後結束寫入模式為止。
注意
如果鎖定允許遞迴,在寫入模式中進入鎖定的執行緒可以遞迴進入寫入模式,即使其他執行緒正在等候進入寫入模式也一樣。