|
■No102254 (kiku さん) に返信 > var timeout = TimeSpan.FromMilliseconds(0);<==待たない そういう時は、TimSpan.Zero を使います。
ただし、Monitor クラスで即時タイムアウトを目的とする場合には、 void TryEnter(object, TimeSpan, ref bool) bool TryEnter(object, TimeSpan) void TryEnter(object, int, ref bool) bool TryEnter(object, int) ではなく、 void TryEnter(object, ref bool) bool TryEnter(object) を使えば充分です。
ちなみに void Enter(object, ref bool) bool Enter(object) は無限待機ですね。
> この方法なら、既存のlock文はそのまま使えると > 思ったのですが、どうでしょうか? lockobject のロック操作が lock と Monitor の併用ということになると、 処理記述に対称性がなくなるので、後からソースコードを読むときに分かりにくくなるかも。
しかしそれ以前の問題として、 > Monitor.TryEnter(lockobject, timeout, ref lockTaken); > Monitor.Exit(lockObj); Enter 時は「lockobject」で、 Exit 時は「lockObj」というのは、流石に問題がありそう。
|