Aracılığıyla paylaş


RouteCollection.GetReadLock Yöntem

Tanım

Koleksiyondan bir nesne aldığınızda iş parçacığı güvenliğini yönetmek için bir nesne sağlar.

public:
 IDisposable ^ GetReadLock();
public IDisposable GetReadLock ();
member this.GetReadLock : unit -> IDisposable
Public Function GetReadLock () As IDisposable

Döndürülenler

İş parçacığı güvenliğini yöneten bir nesne.

Örnekler

Aşağıdaki örnekte, uygulama çalışırken bir yol aldığınızda yönteminin nasıl kullanılacağı GetReadLock gösterilmektedir. deyimi, Using koleksiyondan okurken çalışma zamanında ne olursa olsun (kod normal tamamlanır veya bir özel durum oluşturulur) kilidin kod bloğunun Using sonunda güvenli bir şekilde serbest bırakılmasını sağlar.

Açıklamalar

RouteCollection nesnesi, uygulamadaki birden çok işlem tarafından kullanılabilir. Bu nedenle, uygulama çalışırken bir yol almanız gerekiyorsa, iş parçacığı güvenliğini garanti etmek için yöntemini kullanın GetReadLock . Yol koleksiyonunda okuma kilidi alarak, koleksiyonu almaya çalışırken değiştirilmeyeceğinden emin olursunuz.

yöntemi, GetReadLock kilit alınıncaya kadar iş parçacığının devam etmelerini durdurur. Bir yazma kilidi varsa, iş parçacığı güncelleştirme tamamlanana ve yazma kilidi serbest bırakılana kadar bekler. Bu yöntem tarafından döndürülen nesne atıldığında IDisposable yol koleksiyonundaki okuma kilidi serbest bırakılır.

kullanmıyorsanız GetReadLock, koleksiyonu okurken RouteCollection bir hata alabilirsiniz. Örneğin, koleksiyondaki RouteCollection nesneleri çağırmadan GetReadLockokumak için döngüye girdiğinizi varsayalım. Bunu yaparken, başka bir istekten gelen başka bir iş parçacığı çağırabilir GetWriteLock ve koleksiyona bir yol ekleyebilir. ardından ilk iş parçacığı bir hatayla başarısız olur.

çağrısı GetReadLockyapmanız gerekmeyen iki senaryo vardır:

  • gibi GetVirtualPath sınıfının genel yöntemleri RouteCollection ve GetRouteData dahili olarak çağrısı GetReadLock yapın. Bu nedenle, koleksiyonundan veri almak için sınıfının genel bir yöntemini RouteCollection çağırdığınızda açıkça çağırmanız GetReadLock gerekmez.

  • Uygulama başlatılırken ve olay işleyicisinde Application_Start olduğu gibi istekleri henüz işlemediğinde yalnızca bir iş parçacığı çalışır. Okurken koleksiyonu güncelleştirebilecek başka iş parçacığı olmadığından çağrısı yapmanız GetReadLockgerekmez.

Şunlara uygulanır

Ayrıca bkz.