どのように単純に監視しますか?
-
05-07-2019 - |
質問
物事をよりシンプルにしようとしています。ここに私のコードがあります:
If Threading.Monitor.TryEnter(syncRoot) Then
Try
'do something
Finally
Threading.Monitor.Exit(syncRoot)
End Try
Else
'do something else
End If
これは、ノイズの点でReaderWriterLockよりもさらに悪いです。 私はC#またはVBを使用できます。そのため、どちらに適用する回答も歓迎します。
解決
デリゲートを使用しますか?
E.g。
public bool TryEnter(object lockObject, Action work)
{
if (Monitor.TryEnter(lockObject))
{
try
{
work();
}
finally
{
Monitor.Exit(lockObject);
}
return true;
}
return false;
}
他のヒント
これは、最後の投稿そして、私は同様の答えを期待しています。唯一の重要な違いは、「null」を返す可能性があることです。タイムアウトが失敗した場合、メソッドから-" Dispose()"は呼び出されず、値を簡単に確認できます:
using(var token = GetLock(syncLock, timeout)) {
if(token != null) { ... }
}
唯一の本当の不具合は、「オブジェクト」に拡張メソッドを必ずしも追加したくないということです。 (または" T where T:class")...
所属していません StackOverflow