Udostępnij za pośrednictwem


AsyncReaderWriterLock Klasa

Definicja

Blokada nieblokująca, która umożliwia współbieżny dostęp, wyłączny dostęp lub współbieżność z możliwościami uaktualniania w celu uzyskania wyłącznego dostępu.

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
Dziedziczenie
AsyncReaderWriterLock
Pochodne
Implementuje

Uwagi

Musimy użyć niestandardowej oczekiwanej zamiast po prostu zwracać zadanie{LockReleaser}, ponieważ musimy ustawić dane CallContext w kontekście osoby odbierającej blokadę, co wymaga wykonania kodu na początku kontynuacji (niezależnie od tego, czy dajemy, czy nie).

Konstruktory

AsyncReaderWriterLock()

Inicjuje nowe wystąpienie klasy AsyncReaderWriterLock.

AsyncReaderWriterLock(Boolean)

Inicjuje nowe wystąpienie klasy AsyncReaderWriterLock.

AsyncReaderWriterLock(JoinableTaskContext, Boolean)

Inicjuje nowe wystąpienie klasy AsyncReaderWriterLock.

Właściwości

AmbientLock

Pobiera blokadę przechowywaną przez kontekst wykonywania obiektu wywołującego.

CanCurrentThreadHoldActiveLock

Pobiera wartość wskazującą, czy bieżący wątek może przechowywać aktywną blokadę.

CaptureDiagnostics

Pobiera lub ustawia wartość wskazującą, czy należy wydać dodatkowe zasoby w celu zbierania informacji, które byłyby przydatne w diagnozowaniu zakleszczeń itp.

Completion

Pobiera zadanie, którego ukończenie sygnalizuje, że ta blokada nie będzie już wystawiać blokad.

DeadlockCheckTimeout

Pobiera opóźnienie czasu, aby sprawdzić, czy oczekująca blokada zapisywania i czytnik blokuje zakleszczenie.

IsAnyLockHeld

Pobiera wartość wskazującą, czy jakikolwiek rodzaj blokady jest przechowywany przez obiekt wywołujący i może być natychmiast używany przy użyciu kontekstu obiektu wywołującego.

IsAnyPassiveLockHeld

Pobiera wartość wskazującą, czy jakikolwiek rodzaj blokady jest przechowywany przez obiekt wywołujący bez względu na zgodność blokady kontekstu obiektu wywołującego.

IsPassiveReadLockHeld

Pobiera wartość wskazującą, czy blokada odczytu jest przechowywana przez obiekt wywołujący bez względu na zgodność blokady kontekstu obiektu wywołującego.

IsPassiveUpgradeableReadLockHeld

Pobiera wartość wskazującą, czy blokada odczytu z możliwością uaktualnienia jest przechowywana przez obiekt wywołujący bez względu na zgodność blokady kontekstu obiektu wywołującego.

IsPassiveWriteLockHeld

Pobiera wartość wskazującą, czy blokada zapisu jest przechowywana przez obiekt wywołujący bez względu na zgodność blokady kontekstu obiektu wywołującego.

IsReadLockHeld

Pobiera wartość wskazującą, czy obiekt wywołujący przechowuje blokadę odczytu.

IsUnsupportedSynchronizationContext

Pobiera wartość wskazującą, czy bieżący element SynchronizationContext jest taki, który nie jest obsługiwany przez tę blokadę.

IsUpgradeableReadLockHeld

Pobiera wartość wskazującą, czy obiekt wywołujący przechowuje blokadę odczytu z możliwością uaktualnienia.

IsWriteLockHeld

Pobiera wartość wskazującą, czy obiekt wywołujący przechowuje blokadę zapisu.

NoMessagePumpSynchronizationContext

SynchronizationContext Pobiera, który po zastosowaniu pomija wszelkie pompy komunikatów, które mogą być uruchamiane podczas synchronicznych bloków wątku wywołującego.

SyncObject

Pobiera obiekt używany do synchronizowania dostępu do pól tego wystąpienia.

Metody

Complete()

Powoduje odrzucenie nowych żądań blokad najwyższego poziomu, a Completion zadanie przejścia do stanu ukończonego po zwolnieniu wszystkich wystawionych blokad.

Dispose()

Blokada nieblokująca, która umożliwia współbieżny dostęp, wyłączny dostęp lub współbieżność z możliwościami uaktualniania w celu uzyskania wyłącznego dostępu.

Dispose(Boolean)

Usuwa zarządzane i niezarządzane zasoby przechowywane przez to wystąpienie.

GetAggregateLockFlags()

Zwraca agregację flag blokady dla wszystkich zagnieżdżonych blokad.

GetHangReport()

Współtworzy dane raportu zawieszenia.

GetTaskSchedulerForReadLockRequest()

Pobierz harmonogram zadań, aby wykonać kontynuację po uzyskaniu blokady. AsyncReaderWriterLock używa specjalnej SynchronizationContext funkcji do obsługi blokad wyłącznych i zignoruje podany harmonogram zadań, więc jest on używany tylko w scenariuszu blokady odczytu. Ta metoda jest wywoływana w kontekście wykonywania, aby czekać na blokadę odczytu, aby mogła być pobierana TaskScheduler na podstawie bieżącego kontekstu wykonywania. Uwaga: harmonogram zadań jest używany tylko wtedy, gdy blokada zostanie wydana później. Jeśli blokada zostanie wystawiona natychmiast po CanCurrentThreadHoldActiveLock zwracaniu wartości true, zostanie zignorowana.

HideLocks()

Zapobiega używaniu lub widoczności blokad obiektu wywołującego, dopóki zwrócona wartość nie zostanie usunięta.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

Sprawdza, czy zagregowane flagi ze wszystkich blokad w stosie blokady spełniają określone flagi.

OnBeforeExclusiveLockReleasedAsync()

Wyzwolony, gdy ostatnia blokada zapisu ma zostać zwolniona.

OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle)

Wyzwolony po zwolnieniu blokady.

OnBeforeWriteLockReleased(Func<Task>)

Rejestruje wywołanie zwrotne, które ma być wywoływane, gdy blokada zapisu przechowywana przez obiekt wywołujący ma zostać ostatecznie zwolniona (najbardziej zewnętrzna blokada zapisu).

OnCriticalFailure(Exception)

Wywoływane po wykryciu błędu wewnętrznego lub nielegalnego wzorca użycia, który wskazuje na poważną wadę, która powinna zostać natychmiast zgłoszona do aplikacji i/lub obniżyć proces, aby uniknąć zawieszenia lub uszkodzenia danych.

OnCriticalFailure(String)

Wywoływane po wykryciu błędu wewnętrznego lub nielegalnego wzorca użycia, który wskazuje na poważną wadę, która powinna zostać natychmiast zgłoszona do aplikacji i/lub obniżyć proces, aby uniknąć zawieszenia lub uszkodzenia danych.

OnExclusiveLockReleasedAsync()

Wywoływane po zwolnieniu blokady wyłącznej, ale zanim ktoś ma szansę wejść do blokady.

OnUpgradeableReadLockReleased()

Wywoływane po zwolnieniu blokady odczytu z możliwością uaktualnienia najwyższego poziomu, nie pozostawiając pozostałej blokady (zapisu).

ReadLockAsync(CancellationToken)

Uzyskuje blokadę odczytu, asynchronicznie oczekując na blokadę, jeśli nie jest natychmiast dostępna.

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Uzyskuje blokadę odczytu, asynchronicznie oczekując na blokadę, jeśli nie jest natychmiast dostępna.

UpgradeableReadLockAsync(CancellationToken)

Uzyskuje blokadę odczytu z możliwością uaktualnienia, asynchronicznie oczekując na blokadę, jeśli nie jest natychmiast dostępna.

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Uzyskuje blokadę odczytu, asynchronicznie oczekując na blokadę, jeśli nie jest natychmiast dostępna.

WriteLockAsync(CancellationToken)

Uzyskuje blokadę odczytu, asynchronicznie oczekując na blokadę, jeśli nie jest natychmiast dostępna.

Jawne implementacje interfejsu

IHangReportContributor.GetHangReport()

Współtworzy dane raportu zawieszenia.

Dotyczy

Bezpieczeństwo wątkowe

Ten typ jest bezpieczny wątkowo dla wszystkich elementów członkowskich.