ReaderWriterLockSlim
クラスはスレッドIDを使用してロックの所有者を確認するので、すべてのメソッドが同じスレッドで実行されるという保証がない非同期メソッドでも安全に使用できます。非同期メソッドでReaderWriterLockSlimを使用することは安全ですか
たとえば、
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
}
私はこの質問を読んでおり、あなたとスティーブン・クレアリーはお互いに矛盾しています。よくわかりません。私は、ロックが問題ではない理由を理解しています。なぜなら、最初の場所でロックを取得した同じスレッドだからです。同じスレッドでも、ReaderWriterLockSlimは常に環境に関係なく非同期で問題になります。 –
@ DonBoxまあ、問題は「いつも」問題ではありません。うまくいきますが、危険です。私は、同様にそれを提案する。同じ文脈で言及したように、あなたは依然としてデッドロックの原因となる再入可能な問題を得ることができます - あなたのルーチンが一度も呼び出されないことがわかったら、それはうまくいくはずです。しかし、それは大きな "if"です。 –