ReaderWriterLockSlim.TryEnterWriteLock Yöntem

Tanım

İsteğe bağlı bir zaman aşımı ile yazma modunda kilidi girmeye çalışır.

Aşırı Yüklemeler

TryEnterWriteLock(Int32)

İsteğe bağlı bir zaman aşımı ile yazma modunda kilidi girmeye çalışır.

TryEnterWriteLock(TimeSpan)

İsteğe bağlı bir zaman aşımı ile yazma modunda kilidi girmeye çalışır.

TryEnterWriteLock(Int32)

Kaynak:
ReaderWriterLockSlim.cs
Kaynak:
ReaderWriterLockSlim.cs
Kaynak:
ReaderWriterLockSlim.cs

İsteğe bağlı bir zaman aşımı ile yazma modunda kilidi girmeye çalışır.

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

Parametreler

millisecondsTimeout
Int32

Beklenen milisaniye sayısı veya süresiz olarak beklemek için -1 (Infinite).

Döndürülenler

true çağıran iş parçacığı yazma moduna girdiyse, değilse, false.

Özel durumlar

RecursionPolicy özelliğidir NoRecursion ve geçerli iş parçacığı zaten kilide girmiştir.

-veya-

Geçerli iş parçacığı başlangıçta kilidi okuma moduna girdi ve bu nedenle yazma moduna girmeye çalışmak kilitlenme olasılığına neden olabilir.

-veya-

Özyineleme numarası sayacın kapasitesini aşabilir. Sınır o kadar büyük ki uygulamalar hiçbir zaman bu sınırla karşılaşmamalıdır.

değeri millisecondsTimeout negatiftir, ancak izin verilen tek negatif değer olan (-1) değerine eşit Infinite değildir.

Örnekler

Aşağıdaki örnekte, yazma moduna kilit girmek için yönteminin zaman aşımı ile nasıl kullanılacağı TryEnterWriteLock gösterilmektedir. Örnekte gösterilen yöntem, eşitlenen önbelleğe yeni bir anahtar/değer çifti ekler. Belirtilen zaman aşımı aralığı iş parçacığı kilidi girmeden önce geçtiğinde yöntemi döndürür false. anahtar/değer çifti eklenirse yöntemi döndürür true .

Anahtar zaten önbellekteyse, iç Dictionary<TKey,TValue> tarafından oluşan özel durumun yöntemi sonlandırmasına izin verilir. finally Yöntemini yürütmek ExitWriteLock için çağıranın kilitlerden çıkmasını sağlayan bir blok kullanılır.

Bu kod, sınıfı için ReaderWriterLockSlim sağlanan daha büyük bir örneğin parçasıdır.

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

Açıklamalar

0 (sıfır) ise millisecondsTimeout , bu yöntem kilit durumunu denetler ve istenen durum kullanılamıyorsa hemen döndürür false .

Diğer iş parçacıkları kilit okuma moduna girmişse, bu iş parçacıkları okuma modundan TryEnterWriteLock çıkana veya zaman aşımı süresi geçene kadar yöntemini çağıran bir iş parçacığı blokları. Yazma moduna girmek için bekleyen iş parçacıkları engellenirken, yazma moduna girmeyi bekleyen tüm iş parçacıkları zaman aşımına uğradı veya yazma moduna girdikten sonra bu moddan çıkana kadar okuma moduna veya yükseltilebilir mod bloğuna girmeye çalışan ek iş parçacıkları.

Not

Kilit özyinelemeye izin veriyorsa, yazma modunda kilide giren bir iş parçacığı, diğer iş parçacıkları yazma moduna girmeyi bekliyor olsa bile yinelemeli olarak yazma moduna girebilir.

Şunlara uygulanır

TryEnterWriteLock(TimeSpan)

Kaynak:
ReaderWriterLockSlim.cs
Kaynak:
ReaderWriterLockSlim.cs
Kaynak:
ReaderWriterLockSlim.cs

İsteğe bağlı bir zaman aşımı ile yazma modunda kilidi girmeye çalışır.

public:
 bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock (TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean

Parametreler

timeout
TimeSpan

Beklenen süre veya süresiz olarak beklemek için -1 milisaniye.

Döndürülenler

true çağıran iş parçacığı yazma moduna girdiyse, değilse, false.

Özel durumlar

RecursionPolicy özelliğidir NoRecursion ve geçerli iş parçacığı zaten kilide girmiştir.

-veya-

Geçerli iş parçacığı başlangıçta kilidi okuma moduna girdi ve bu nedenle yazma moduna girmeye çalışmak kilitlenme olasılığına neden olabilir.

-veya-

Özyineleme numarası sayacın kapasitesini aşabilir. Sınır o kadar büyük ki uygulamalar hiçbir zaman bu sınırla karşılaşmamalıdır.

değeri timeout negatiftir, ancak izin verilen tek negatif değer olan -1 milisaniyeye eşit değildir.

-veya-

değeri timeoutInt32.MaxValue milisaniyeden büyüktür.

Açıklamalar

0 (sıfır) ise timeout , bu yöntem kilit durumunu denetler ve istenen durum kullanılamıyorsa hemen döndürür false .

Diğer iş parçacıkları kilit okuma moduna girmişse, bu iş parçacıkları okuma modundan TryEnterWriteLock çıkana veya zaman aşımı süresi geçene kadar yöntemini çağıran bir iş parçacığı blokları. Yazma moduna girmek için bekleyen iş parçacıkları engellenirken, yazma moduna girmeyi bekleyen tüm iş parçacıkları zaman aşımına uğradı veya yazma moduna girdikten sonra bu moddan çıkana kadar okuma moduna veya yükseltilebilir mod bloğuna girmeye çalışan ek iş parçacıkları.

Not

Kilit özyinelemeye izin veriyorsa, yazma modunda kilide giren bir iş parçacığı, diğer iş parçacıkları yazma moduna girmeyi bekliyor olsa bile yinelemeli olarak yazma moduna girebilir.

Şunlara uygulanır