Język

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 do 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

Nazwa Opis
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

Nazwa Opis
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 podczas diagnozowania zakleszczeń itp.

Completion

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

DeadlockCheckTimeout

Pobiera opóźnienie czasu w celu sprawdzenia, czy oczekująca blokada modułu zapisywania i czytnik blokuje zakleszczenie.

IsAnyLockHeld

Pobiera wartość wskazującą, czy jakikolwiek rodzaj blokady jest utrzymywany przez obiekt wywołujący i może być natychmiast używany, biorąc pod uwagę kontekst obiektu wywołującego.

IsAnyPassiveLockHeld

Pobiera wartość wskazującą, czy jakikolwiek rodzaj blokady jest utrzymywany 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żąca wartość SynchronizationContext jest taka, która nie jest obsługiwana 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

Pobiera element SynchronizationContext , który po zastosowaniu pomija wszystkie 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

Nazwa Opis
Complete()

Powoduje odrzucenie nowych żądań blokowania najwyższego poziomu i Completion przejście zadania do stanu ukończenia 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 do 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 dla 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ń, dlatego jest używany tylko w scenariuszu blokady odczytu. Ta metoda jest wywoływana w kontekście wykonywania, aby czekać na blokadę odczytu, dzięki czemu może 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 jest wystawiana natychmiast po CanCurrentThreadHoldActiveLock zwracaniu wartości true, zostanie ona zignorowana.

HideLocks()

Zapobiega używaniu lub widoczności blokad obiektu wywołującego do momentu usunięcia zwróconej wartości.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

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

OnBeforeExclusiveLockReleasedAsync()

Wyzwolony, gdy ma zostać zwolniona ostatnia blokada zapisu.

OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle)

Wyzwolony, gdy jest zwalniana blokada.

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ływana, gdy blokada wykryje błąd wewnętrzny lub nielegalny wzorzec 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ływana, gdy blokada wykryje błąd wewnętrzny lub nielegalny wzorzec 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ływana 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 z możliwością uaktualnienia, 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ę zapisu, asynchronicznie oczekującą na blokadę, jeśli nie jest natychmiast dostępna.

WriteLockAsync(CancellationToken)

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

Jawne implementacje interfejsu

Nazwa Opis
IHangReportContributor.GetHangReport()

Współtworzy dane dla raportu zawieszenia.

Dotyczy

Bezpieczeństwo wątkowe

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