Ponieważ klasa ReaderWriterLockSlim
używa identyfikatora wątku, aby zobaczyć, kto jest właścicielem blokady, jest bezpieczny w użyciu z metodami asynchronicznymi, gdzie nie ma gwarancji, że cała metoda zostanie wykonana w tym samym wątku .Czy można bezpiecznie używać ReadWriterLockSlim w asynchronicznej metodzie
Na przykład.
System.Threading.ReaderWriterLockSlim readerwriterlock = new System.Threading.ReaderWriterLockSlim();
private async Task Test()
{
readerwriterlock.EnterWriteLock();
await Task.Yield(); //do work that could yield the task
readerwriterlock.ExitWriteLock(); //potentailly exit the lock on a different thread
}
Czytam to pytanie i dwie odpowiedzi, twoje i Stephen Cleary są ze sobą sprzeczne. Jestem zmieszany. Rozumiem, dlaczego w WPF na przykład zamek nie stanowi problemu, ponieważ jest to ten sam wątek, który ma blokadę, ale Stephen mówi, że pomimo tego samego wątku, ReadWriterLockSlim zawsze stanowi problem z asynchronizacją, bez względu na środowisko –
@ DonBox Cóż, to nie jest "zawsze" problem - może działać, ale jest niebezpieczny. Sugeruję to również.Jak wspomniał, w tym samym kontekście nadal możesz napotkać problemy z ponownym wejściem, które spowodują impas - jeśli wiesz, że twoja rutyna nigdy nie zostanie wywołana> 1 raz na nowo, to powinno działać, ale to jest duże "jeśli" –