Bagikan melalui


AsyncReaderWriterLock Kelas

Definisi

Kunci non-pemblokiran yang memungkinkan akses bersamaan, akses eksklusif, atau bersamaan dengan peningkatan ke akses eksklusif.

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
Warisan
AsyncReaderWriterLock
Turunan
Penerapan

Keterangan

Kita harus menggunakan kustom yang dapat ditunggu daripada hanya mengembalikan Task{LockReleaser} karena kita harus mengatur data CallContext dalam konteks orang yang menerima kunci, yang mengharuskan kita untuk mengeksekusi kode di awal kelanjutan (baik kita menghasilkan atau tidak).

Konstruktor

AsyncReaderWriterLock()

Menginisialisasi instans baru kelas AsyncReaderWriterLock.

AsyncReaderWriterLock(Boolean)

Menginisialisasi instans baru kelas AsyncReaderWriterLock.

AsyncReaderWriterLock(JoinableTaskContext, Boolean)

Menginisialisasi instans baru kelas AsyncReaderWriterLock.

Properti

AmbientLock

Mendapatkan kunci yang dipegang oleh konteks eksekusi pemanggil.

CanCurrentThreadHoldActiveLock

Mendapatkan nilai yang menunjukkan apakah utas saat ini diizinkan untuk menahan kunci aktif.

CaptureDiagnostics

Mendapatkan atau menetapkan nilai yang menunjukkan apakah sumber daya tambahan harus dihabiskan untuk mengumpulkan informasi yang akan berguna dalam mendiagnosis kebuntuan, dll.

Completion

Mendapatkan tugas yang penyelesaiannya menandakan bahwa kunci ini tidak akan lagi mengeluarkan kunci.

DeadlockCheckTimeout

Mendapatkan penundaan waktu untuk memeriksa apakah kunci penulis yang tertunda dan kunci pembaca membentuk kebuntuan.

IsAnyLockHeld

Mendapatkan nilai yang menunjukkan apakah segala jenis kunci dipegang oleh pemanggil dan dapat segera digunakan mengingat konteks pemanggil.

IsAnyPassiveLockHeld

Mendapatkan nilai yang menunjukkan apakah segala jenis kunci dipegang oleh pemanggil tanpa memperhatikan kompatibilitas kunci konteks pemanggil.

IsPassiveReadLockHeld

Mendapatkan nilai yang menunjukkan apakah kunci baca dipegang oleh penelepon tanpa memperhatikan kompatibilitas kunci konteks pemanggil.

IsPassiveUpgradeableReadLockHeld

Mendapatkan nilai yang menunjukkan apakah kunci baca yang dapat ditingkatkan dipegang oleh pemanggil tanpa memperhatikan kompatibilitas kunci konteks pemanggil.

IsPassiveWriteLockHeld

Mendapatkan nilai yang menunjukkan apakah kunci tulis dipegang oleh penelepon tanpa memperhatikan kompatibilitas kunci konteks pemanggil.

IsReadLockHeld

Mendapatkan nilai yang menunjukkan apakah penelepon memegang kunci baca.

IsUnsupportedSynchronizationContext

Mendapatkan nilai yang menunjukkan apakah SynchronizationContext saat ini adalah nilai yang tidak didukung oleh kunci ini.

IsUpgradeableReadLockHeld

Mendapatkan nilai yang menunjukkan apakah penelepon memegang kunci baca yang dapat ditingkatkan.

IsWriteLockHeld

Mendapatkan nilai yang menunjukkan apakah penelepon memegang kunci tulis.

NoMessagePumpSynchronizationContext

SynchronizationContext Mendapatkan yang, ketika diterapkan, menekan pompa pesan apa pun yang dapat berjalan selama blok sinkron dari utas panggilan.

SyncObject

Mendapatkan objek yang digunakan untuk menyinkronkan akses ke bidang instans ini.

Metode

Complete()

Menyebabkan permintaan kunci tingkat atas baru ditolak dan Completion tugas untuk beralih ke status selesai setelah kunci yang dikeluarkan telah dirilis.

Dispose()

Kunci non-pemblokiran yang memungkinkan akses bersamaan, akses eksklusif, atau bersamaan dengan peningkatan ke akses eksklusif.

Dispose(Boolean)

Buang sumber daya terkelola dan tidak terkelola yang dipegang oleh instans ini.

GetAggregateLockFlags()

Mengembalikan agregat bendera kunci untuk semua kunci berlapis.

GetHangReport()

Berkontribusi data untuk laporan macet.

GetTaskSchedulerForReadLockRequest()

Dapatkan penjadwal tugas untuk menjalankan kelanjutan ketika kunci diperoleh. AsyncReaderWriterLock menggunakan khusus SynchronizationContext untuk menangani kunci eksklusif, dan akan mengabaikan penjadwal tugas yang disediakan, sehingga ini hanya digunakan dalam skenario kunci baca. Metode ini dipanggil dalam konteks eksekusi untuk menunggu kunci baca, sehingga dapat mengambil TaskScheduler berdasarkan konteks eksekusi saat ini. Catatan: penjadwal tugas hanya digunakan, ketika kunci dikeluarkan nanti. Jika kunci dikeluarkan segera ketika CanCurrentThreadHoldActiveLock mengembalikan true, kunci akan diabaikan.

HideLocks()

Mencegah penggunaan atau visibilitas kunci pemanggil hingga nilai yang dikembalikan dibuang.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

Memeriksa apakah bendera agregat dari semua kunci di tumpukan kunci memenuhi bendera yang ditentukan.

OnBeforeExclusiveLockReleasedAsync()

Diaktifkan ketika kunci tulis terakhir akan dilepaskan.

OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle)

Diaktifkan saat kunci apa pun dilepaskan.

OnBeforeWriteLockReleased(Func<Task>)

Mendaftarkan panggilan balik yang akan dipanggil ketika kunci tulis yang dipegang oleh penelepon pada akhirnya akan dirilis (kunci tulis terluar).

OnCriticalFailure(Exception)

Dipanggil ketika kunci mendeteksi kesalahan internal atau pola penggunaan ilegal yang menunjukkan kelemahan serius yang harus segera dilaporkan ke aplikasi dan/atau menurunkan proses untuk menghindari hang atau kerusakan data.

OnCriticalFailure(String)

Dipanggil ketika kunci mendeteksi kesalahan internal atau pola penggunaan ilegal yang menunjukkan kelemahan serius yang harus segera dilaporkan ke aplikasi dan/atau menurunkan proses untuk menghindari hang atau kerusakan data.

OnExclusiveLockReleasedAsync()

Dipanggil setelah kunci eksklusif dilepaskan tetapi sebelum ada yang memiliki kesempatan untuk memasukkan kunci.

OnUpgradeableReadLockReleased()

Dipanggil ketika kunci baca yang dapat ditingkatkan tingkat atas dilepaskan, tidak meninggalkan kunci (tulis) yang tersisa.

ReadLockAsync(CancellationToken)

Mendapatkan kunci baca, secara asinkron menunggu kunci jika tidak segera tersedia.

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Mendapatkan kunci baca, secara asinkron menunggu kunci jika tidak segera tersedia.

UpgradeableReadLockAsync(CancellationToken)

Mendapatkan kunci baca yang dapat ditingkatkan, secara asinkron menunggu kunci jika tidak segera tersedia.

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Mendapatkan kunci tulis, secara asinkron menunggu kunci jika tidak segera tersedia.

WriteLockAsync(CancellationToken)

Mendapatkan kunci tulis, secara asinkron menunggu kunci jika tidak segera tersedia.

Implementasi Antarmuka Eksplisit

IHangReportContributor.GetHangReport()

Berkontribusi data untuk laporan macet.

Berlaku untuk

Keamanan Thread

Jenis ini aman untuk semua anggota.