簡単なコード(添付)を作成しましたが、一部のブロックのロックがスコープをロックしていない理由がわかりません。
コード :
object locker = new object();
private void foo(int i)
{
Console.WriteLine( string.Format( "i is {0}", i ) );
lock( locker )
{
while( true )
{
Console.WriteLine( string.Format( "i in while loop is {0}", i ) ) ;
foo( ++i );
}
}
}
whileループでのfooメソッドの呼び出しは、ロッカーが解放されるまで待機することを期待しています(ロッカースコープ)。ただし、引数が++ iのfooのすべての呼び出しは、ロッカーブロックに入ることができます。