AFAIKlock
、これら2つのバージョンには違いがあります。
フレームワーク4は、モニター入力中に例外が発生したかどうかのチェックをもう1つ追加しました(メモリ不足の例外など)。
また、ロックを(句内で)解放する必要があるかどうか(句内のコードが失敗したため)lockTaken
を示すフラグがあります。finally
try
何かのようなもの
bool lockTaken = false;
try
{
Monitor.Enter (lockObj, ref lockTaken);
...
}
finally { if (lockTaken) Monitor.Exit (lockObj); }
(コードと非常によく似ていusing
ます(dispose ...))
しかし、reflectorで見ると、まったく異なるものが表示されます。
[SecuritySafeCritical]
public static void Enter(object obj, ref bool lockTaken)
{
if (lockTaken)
{
throw new ArgumentException(Environment.GetResourceString("Argument_MustBeFalse"), "lockTaken");
}
ReliableEnter(obj, ref lockTaken);
}
最後に、tryのパターンはどこにありますか?
私は何が欠けていますか?