ReaderWriterLockSlim.TryEnterWriteLock 方法

定義

嘗試以選用的逾時,在寫入模式下進入鎖定狀態。

多載

TryEnterWriteLock(Int32)

嘗試以選用的逾時,在寫入模式下進入鎖定狀態。

TryEnterWriteLock(TimeSpan)

嘗試以選用的逾時,在寫入模式下進入鎖定狀態。

TryEnterWriteLock(Int32)

來源:
ReaderWriterLockSlim.cs
來源:
ReaderWriterLockSlim.cs
來源:
ReaderWriterLockSlim.cs

嘗試以選用的逾時,在寫入模式下進入鎖定狀態。

public:
 bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock (int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean

參數

millisecondsTimeout
Int32

要等候的毫秒數;若要永遠等候,則為 -1 (Infinite)。

傳回

如果呼叫的執行緒已進入寫入模式,則為 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)

來源:
ReaderWriterLockSlim.cs
來源:
ReaderWriterLockSlim.cs
來源:
ReaderWriterLockSlim.cs

嘗試以選用的逾時,在寫入模式下進入鎖定狀態。

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 的值為負,但不等於 -1 毫秒,這是唯一允許的負值。

-或-

的值 timeout 大於 Int32.MaxValue 毫秒。

備註

如果 timeout 為 0 (零) ,這個方法會檢查鎖定狀態,並在所需的狀態無法使用時立即傳回 false

如果其他執行緒在讀取模式中進入鎖定,則會呼叫 TryEnterWriteLock 方法的執行緒會封鎖,直到這些執行緒結束讀取模式,或直到逾時間隔經過為止。 當執行緒在等候進入寫入模式時,嘗試進入讀取模式或可升級模式區塊的其他執行緒,直到所有等候進入寫入模式的執行緒逾時或進入寫入模式,然後結束寫入模式為止。

注意

如果鎖定允許遞迴,在寫入模式中進入鎖定的執行緒可以遞迴進入寫入模式,即使其他執行緒正在等候進入寫入模式也一樣。

適用於