Bagikan melalui


ReaderWriterLockSlim.TryEnterWriteLock Metode

Definisi

Mencoba memasukkan kunci dalam mode tulis, dengan batas waktu opsional.

Overload

TryEnterWriteLock(Int32)

Mencoba memasukkan kunci dalam mode tulis, dengan batas waktu opsional.

TryEnterWriteLock(TimeSpan)

Mencoba memasukkan kunci dalam mode tulis, dengan batas waktu opsional.

TryEnterWriteLock(Int32)

Sumber:
ReaderWriterLockSlim.cs
Sumber:
ReaderWriterLockSlim.cs
Sumber:
ReaderWriterLockSlim.cs

Mencoba memasukkan kunci dalam mode tulis, dengan batas waktu opsional.

public:
 bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock (int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean

Parameter

millisecondsTimeout
Int32

Jumlah milidetik untuk menunggu, atau -1 (Infinite) untuk menunggu tanpa batas waktu.

Mengembalikan

true jika utas panggilan memasuki mode tulis, jika tidak, false.

Pengecualian

Properti RecursionPolicy adalah NoRecursion dan utas saat ini telah memasukkan kunci.

-atau-

Utas saat ini awalnya memasuki kunci dalam mode baca, dan karenanya mencoba memasuki mode tulis akan menciptakan kemungkinan kebuntuan.

-atau-

Jumlah rekursi akan melebihi kapasitas penghitung. Batasnya sangat besar sehingga aplikasi tidak boleh menemukannya.

Nilai millisecondsTimeout negatif, tetapi tidak sama dengan Infinite (-1), yang merupakan satu-satunya nilai negatif yang diizinkan.

Contoh

Contoh berikut menunjukkan cara menggunakan TryEnterWriteLock metode untuk memasukkan kunci dalam mode tulis, dengan waktu habis. Metode yang ditunjukkan dalam contoh menambahkan pasangan kunci/nilai baru ke cache yang disinkronkan. Jika interval waktu habis yang ditentukan berlalu sebelum utas memasuki kunci, metode akan mengembalikan false. Metode mengembalikan true jika pasangan kunci/nilai ditambahkan.

Jika kunci sudah ada di cache, pengecualian yang dilemparkan oleh bagian dalam Dictionary<TKey,TValue> diizinkan untuk mengakhiri metode . finally Blok digunakan untuk menjalankan ExitWriteLock metode , memastikan bahwa penelepon keluar dari kunci.

Kode ini adalah bagian dari contoh yang lebih besar yang disediakan untuk ReaderWriterLockSlim kelas .

private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
Private cacheLock As New ReaderWriterLockSlim()
Private innerCache As New Dictionary(Of Integer, String)
public bool AddWithTimeout(int key, string value, int timeout)
{
    if (cacheLock.TryEnterWriteLock(timeout))
    {
        try
        {
            innerCache.Add(key, value);
        }
        finally
        {
            cacheLock.ExitWriteLock();
        }
        return true;
    }
    else
    {
        return false;
    }
}
Public Function AddWithTimeout(ByVal key As Integer, ByVal value As String, _
                               ByVal timeout As Integer) As Boolean
    If cacheLock.TryEnterWriteLock(timeout) Then
        Try
            innerCache.Add(key, value)
        Finally
            cacheLock.ExitWriteLock()
        End Try
        Return True
    Else
        Return False
    End If
End Function

Keterangan

Jika millisecondsTimeout adalah 0 (nol), metode ini memeriksa status kunci dan segera kembali false jika status yang diinginkan tidak tersedia.

Jika utas lain telah memasuki kunci dalam mode baca, utas TryEnterWriteLock yang memanggil blok metode hingga utas tersebut keluar dari mode baca atau hingga interval waktu habis berlalu. Saat utas diblokir menunggu untuk memasuki mode tulis, utas tambahan yang mencoba memasukkan mode baca atau blok mode yang dapat ditingkatkan hingga semua utas yang menunggu untuk memasuki mode tulis telah kehabisan waktu atau memasuki mode tulis lalu keluar darinya.

Catatan

Jika kunci memungkinkan rekursi, utas yang telah memasuki kunci dalam mode tulis dapat memasuki mode tulis secara rekursif, bahkan jika utas lain menunggu untuk memasuki mode tulis.

Berlaku untuk

TryEnterWriteLock(TimeSpan)

Sumber:
ReaderWriterLockSlim.cs
Sumber:
ReaderWriterLockSlim.cs
Sumber:
ReaderWriterLockSlim.cs

Mencoba memasukkan kunci dalam mode tulis, dengan batas waktu opsional.

public:
 bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock (TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean

Parameter

timeout
TimeSpan

Interval untuk menunggu, atau -1 milidetik untuk menunggu tanpa batas waktu.

Mengembalikan

true jika utas panggilan memasuki mode tulis, jika tidak, false.

Pengecualian

Properti RecursionPolicy adalah NoRecursion dan utas saat ini telah memasukkan kunci.

-atau-

Utas saat ini awalnya memasuki kunci dalam mode baca, dan karenanya mencoba memasuki mode tulis akan menciptakan kemungkinan kebuntuan.

-atau-

Jumlah rekursi akan melebihi kapasitas penghitung. Batasnya sangat besar sehingga aplikasi tidak boleh menemukannya.

Nilai timeout negatif, tetapi tidak sama dengan -1 milidetik, yang merupakan satu-satunya nilai negatif yang diizinkan.

-atau-

Nilai timeout lebih besar dari Milidetik Int32.MaxValue .

Keterangan

Jika timeout adalah 0 (nol), metode ini memeriksa status kunci dan segera kembali false jika status yang diinginkan tidak tersedia.

Jika utas lain telah memasuki kunci dalam mode baca, utas TryEnterWriteLock yang memanggil blok metode hingga utas tersebut keluar dari mode baca atau hingga interval waktu habis berlalu. Saat utas diblokir menunggu untuk memasuki mode tulis, utas tambahan yang mencoba memasukkan mode baca atau blok mode yang dapat ditingkatkan hingga semua utas yang menunggu untuk memasuki mode tulis telah kehabisan waktu atau memasuki mode tulis lalu keluar darinya.

Catatan

Jika kunci memungkinkan rekursi, utas yang telah memasuki kunci dalam mode tulis dapat memasuki mode tulis secara rekursif, bahkan jika utas lain menunggu untuk memasuki mode tulis.

Berlaku untuk