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

Name Description
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)

İ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, aksi takdirde , false.

Özel durumlar

RecursionPolicy özelliğidir NoRecursion ve geçerli iş parçacığı zaten kilidi 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, uygulamaların hiçbir zaman karşılaşmaması için o kadar büyük ki.

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, zaman aşımı ile TryEnterWriteLock yazma moduna kilit girmek için yönteminin nasıl kullanılacağı 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ığı kilitlenmeden önce ularsa, 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 Çağıranın ExitWriteLock kilitlerden çıktığından emin olmak için yöntemini yürütmek için 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ı kilidi okuma moduna girmişse, bu iş parçacıkları okuma modundan TryEnterWriteLock çıkana veya zaman aşımı aralığı 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 moda girmeye çalışan ek iş parçacıkları engellenir.

Note

Bir kilit özyinelemeye izin veriyorsa, yazma moduna kilit 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)

İ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

Bekleme aralığı veya süresiz olarak beklemek için -1 milisaniye.

Döndürülenler

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

Özel durumlar

RecursionPolicy özelliğidir NoRecursion ve geçerli iş parçacığı zaten kilidi 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, uygulamaların hiçbir zaman karşılaşmaması için o kadar büyük ki.

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ı kilidi okuma moduna girmişse, bu iş parçacıkları okuma modundan TryEnterWriteLock çıkana veya zaman aşımı aralığı 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 moda girmeye çalışan ek iş parçacıkları engellenir.

Note

Bir kilit özyinelemeye izin veriyorsa, yazma moduna kilit 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