2010-12-06 25 views
9

Kısayolunu lock(myLock){ /* do stuff */}'un C#'sindeki gibi seviyorum. Okuma/yazma kilitleri için bir eşdeğer var mı? (Özellikle ReaderWriterLockSlim.) Şu anda, çalıştığımı düşündüğüm şu özel yöntemi kullanıyorum ama biraz sinir bozucu çünkü anonim bir işlev olarak eylemimde geçmek zorundayım ve mümkünse standart kilitleme mekanizmasını kullanmayı tercih ederim. .ReaderWriterLockSlim için kilit {} ifadesinin bir karşılığı var mı?

+1

* deneyin * ifadesi yanlış yerde olduğunu. * TryEnterWriteLock() öğesinden sonra * koyun. Bir değişkene gerek yok, bir kısayol anlamsız olur. ' –

cevap

14

anahtar kelimesinin davranışını geçersiz kılabilirsiniz. Yaygın bir teknik, using anahtar kelimesini kaçırmaktır.

  1. Yap bir IDisposable
  2. DoWithWriteLock yöntemle
  3. Dönüş IDisposable uygulayan bir nesne içindeki TryEnterWriteLock çağrıyı tutun dönmek DoWithWriteLock. Bu nesnenin Dispose yönteminde, aramayı ExitWriteLock'a koyun.

Sonuç:

// Before 
DoWithWriteLock(rwLock, 
    delegate 
    { 
     Do1(); 
     Do2() 
    }); 

// After 
using (DoWithWriteLock(rwLock)) 
{ 
    Do1(); 
    Do2(); 
} 
+1

önce. Bu F # daha kolay olurdu doğru mu? – Andrey

+0

Hi Tim;' DoWithWriteLock (rwLock,() => {; Do2() DO1()}): daha iyi olabilir – jonnii

+0

TryEnterWriteLock için bir zaman aşımı ile bunu yapmak için benzer bir yolu var mı? – Xodarap

İlgili konular