情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Monitor.TryEnter メソッド (Object, Int32, Boolean%)

2013/12/12

指定したオブジェクトの排他ロックの取得を指定したミリ秒間試み、ロックが取得されたかどうかを示す値をアトミックに設定します。

Namespace:  System.Threading
アセンブリ:  mscorlib (mscorlib.dll 内)

public static void TryEnter(
	Object obj,
	int millisecondsTimeout,
	ref bool lockTaken
)

パラメーター

obj
型: System.Object
ロックの取得が行われるオブジェクト。
millisecondsTimeout
型: System.Int32
ロックを待機するミリ秒単位の時間。
lockTaken
型: System.Boolean %
ロックを取得しようとした結果で、参照渡しです。入力時には false にする必要があります。ロックが取得された場合、出力は true になります。それ以外の場合、出力は false です。ロックを取得しようとしている間に例外が発生した場合でも、出力は設定されます。

例外条件
ArgumentException

lockTaken への入力は true です。

ArgumentNullException

obj パラメーターが null です。

ArgumentOutOfRangeException

millisecondsTimeout が負で、Infinite と等価でありません。

millisecondsTimeout パラメーターが Infinite と等しい場合、このメソッドは Enter(Object) と等価になります。millisecondsTimeout が 0 の場合、このメソッドは TryEnter(Object) と等価になります。

例外がスローされたためにロックが取得されなかった場合、このメソッドが終了した後、lockTaken に指定された変数は false になります。これにより、どのような場合でも、ロックを解放する必要があるかどうかをプログラムで判断できます。

メモメモ:

値型ではなく、オブジェクト (つまり参照型) をロックするには Monitor を使用します。詳細については、Enter のおよび概念に関するトピック「[33FE4AEF-B44B-42FD-9E72-C908E39E75DB]」を参照してください。

TryEnter(Object, Boolean) メソッド オーバーロードを使用する基本パターンを次のコードに示します。メソッドが例外をスローし、変数の値によって、ロックを解除する必要があるかどうかが確認できる場合でも、このオーバーロードは常に、ref パラメーター (Visual Basic では ByRef) に渡される変数の値 lockTaken を設定します。


bool acquiredLock = false;

try
{
    Monitor.TryEnter(lockObject, 500, ref acquiredLock);
    if (acquiredLock)
    {

        // Code that accesses resources that are protected by the lock.

    }
    else
    {

        // Code to deal with the fact that the lock was not acquired.

    }
}
finally
{
    if (acquiredLock)
    {
        Monitor.Exit(lockObject);
    }
}


Windows Phone OS

サポート: 8.0, 7.1

表示: