Sdílet prostřednictvím


AsyncReaderWriterLock Třída

Definice

Neblokující zámek, který umožňuje souběžný přístup, výhradní přístup nebo souběžný s možností upgradu na výhradní přístup.

public ref class AsyncReaderWriterLock : IDisposable, Microsoft::VisualStudio::Threading::IHangReportContributor
public class AsyncReaderWriterLock : IDisposable, Microsoft.VisualStudio.Threading.IHangReportContributor
type AsyncReaderWriterLock = class
    interface IHangReportContributor
    interface IDisposable
Public Class AsyncReaderWriterLock
Implements IDisposable, IHangReportContributor
Dědičnost
AsyncReaderWriterLock
Odvozené
Implementuje

Poznámky

Místo pouhého vrácení task{LockReleaser} musíme použít vlastní awaitable, protože musíme nastavit data CallContext v kontextu osoby, která zámek přijímá, což vyžaduje, abychom se dostali ke spuštění kódu na začátku pokračování (bez ohledu na to, jestli dáváme nebo ne).

Konstruktory

AsyncReaderWriterLock()

Inicializuje novou instanci AsyncReaderWriterLock třídy.

AsyncReaderWriterLock(Boolean)

Inicializuje novou instanci AsyncReaderWriterLock třídy.

AsyncReaderWriterLock(JoinableTaskContext, Boolean)

Inicializuje novou instanci AsyncReaderWriterLock třídy.

Vlastnosti

AmbientLock

Získá zámek uložený kontextem spuštění volajícího.

CanCurrentThreadHoldActiveLock

Získá hodnotu označující, zda aktuální vlákno může obsahovat aktivní zámek.

CaptureDiagnostics

Získá nebo nastaví hodnotu určující, zda další prostředky mají být vynaloženy ke shromažďování informací, které by byly užitečné při diagnostice vzájemného zablokování atd.

Completion

Získá úkol, jehož dokončení signalizuje, že tento zámek již nebude vydávat zámky.

DeadlockCheckTimeout

Získá časové zpoždění ke kontrole, zda čekající zámek zapisovače a zámky čtečky tvoří vzájemné zablokování.

IsAnyLockHeld

Získá hodnotu určující, zda je nějaký druh zámku držen volající a může být okamžitě použit vzhledem k kontextu volajícího.

IsAnyPassiveLockHeld

Získá hodnotu označující, zda je nějaký druh zámku držen volající bez ohledu na kompatibilitu zámku kontextu volajícího.

IsPassiveReadLockHeld

Získá hodnotu označující, zda je zámek čtení držen volající bez ohledu na kompatibilitu zámku kontextu volajícího.

IsPassiveUpgradeableReadLockHeld

Získá hodnotu označující, zda upgradovatelný zámek čtení je držen volající bez ohledu na zámek kompatibilitu kontextu volajícího.

IsPassiveWriteLockHeld

Získá hodnotu označující, zda je zámek zápisu držen volající bez ohledu na kompatibilitu zámku kontextu volajícího.

IsReadLockHeld

Získá hodnotu označující, zda volající drží zámek čtení.

IsUnsupportedSynchronizationContext

Získá hodnotu určující, zda aktuální SynchronizationContext je jeden, který není podporován tento zámek.

IsUpgradeableReadLockHeld

Získá hodnotu označující, zda volající má upgradovatelný zámek čtení.

IsWriteLockHeld

Získá hodnotu označující, zda volající drží zámek zápisu.

NoMessagePumpSynchronizationContext

Získá SynchronizationContext , který při použití potlačí všechny zprávy pumpy, které mohou běžet během synchronních bloků volání vlákna.

SyncObject

Získá objekt použitý k synchronizaci přístupu k polím této instance.

Metody

Complete()

Způsobí odmítnutí nových žádostí o uzamčení nejvyšší úrovně a Completion přechod úkolu do dokončeného stavu po uvolnění všech vydaných zámků.

Dispose()

Neblokující zámek, který umožňuje souběžný přístup, výhradní přístup nebo souběžný s možností upgradu na výhradní přístup.

Dispose(Boolean)

Zlikviduje spravované a nespravované prostředky uchovávané touto instancí.

GetAggregateLockFlags()

Vrátí agregaci příznaků zámku pro všechny vnořené zámky.

GetHangReport()

Přispívá k datům pro sestavu zablokování.

GetTaskSchedulerForReadLockRequest()

Získejte plánovač úloh, aby po získání zámku spustil pokračování. AsyncReaderWriterLock používá speciální SynchronizationContext ke zpracování exkluzivních zámků a ignoruje zadaný plánovač úloh, takže se používá pouze ve scénáři uzamčení čtení. Tato metoda je volána v kontextu spuštění, aby čekala na zámek čtení, takže se může navázat TaskScheduler na základě aktuálního kontextu spuštění. Poznámka: Plánovač úloh se používá pouze při pozdějším vydání zámku. Pokud je zámek vydán okamžitě, když CanCurrentThreadHoldActiveLock vrátí hodnotu true, bude ignorován.

HideLocks()

Zabraňuje použití nebo viditelnosti zámků volajícího, dokud nebude vrácená hodnota odstraněna.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

Zkontroluje, jestli agregované příznaky ze všech zámků v zásobníku zámků splňují zadané příznaky.

OnBeforeExclusiveLockReleasedAsync()

Aktivuje se, když se chystá uvolnit poslední zámek zápisu.

OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle)

Aktivuje se při uvolnění jakéhokoli zámku.

OnBeforeWriteLockReleased(Func<Task>)

Zaregistruje zpětné volání, které má být vyvoláno, když bude zámek zápisu, který volající drží, nakonec uvolněn (vnější zámek zápisu).

OnCriticalFailure(Exception)

Vyvolá se, když zámek zjistí vnitřní chybu nebo neplatný vzor použití, který značí závažnou chybu, která by měla být okamžitě nahlášena aplikaci a/nebo spustit proces, aby nedošlo k zablokování nebo poškození dat.

OnCriticalFailure(String)

Vyvolá se, když zámek zjistí vnitřní chybu nebo neplatný vzor použití, který značí závažnou chybu, která by měla být okamžitě nahlášena aplikaci a/nebo spustit proces, aby nedošlo k zablokování nebo poškození dat.

OnExclusiveLockReleasedAsync()

Vyvolá se po uvolnění výhradního zámku, ale před tím, než má někdo šanci zámek vstoupit.

OnUpgradeableReadLockReleased()

Vyvolá se při uvolnění zámku čtení s možností upgradu na nejvyšší úrovni, který nezanechávají žádný zbývající zámek (zápis).

ReadLockAsync(CancellationToken)

Získá zámek pro čtení, asynchronně čeká na uzamčení, pokud není ihned k dispozici.

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Získá zámek pro čtení, asynchronně čeká na uzamčení, pokud není ihned k dispozici.

UpgradeableReadLockAsync(CancellationToken)

Získá upgradovatelný zámek čtení, který asynchronně čeká na zámek, pokud není okamžitě k dispozici.

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Získá zámek pro zápis, asynchronně čeká na uzamčení, pokud není ihned k dispozici.

WriteLockAsync(CancellationToken)

Získá zámek pro zápis, asynchronně čeká na uzamčení, pokud není ihned k dispozici.

Explicitní implementace rozhraní

IHangReportContributor.GetHangReport()

Přispívá k datům pro sestavu zablokování.

Platí pro

Bezpečný přístup z více vláken

Tento typ je bezpečný pro všechny členy.