0

以下のコードで、コメント化されたコードのコメントを外すと、プログラムの動作が正しくありません。

    private void RecalculateOrders(bool force)
    {
        //if (force)
        //{
        //    lock (desiredOrdersBuy)
        //    {
        //        RecalculateOrdersInternal();
        //    }
        //}
        //else
        //{
            if (Monitor.TryEnter(desiredOrdersBuy))
            {
                try
                {
                    RecalculateOrdersInternal();
                }
                finally
                {
                    Monitor.Exit(desiredOrdersBuy);
                }
            }
        //}
    }

正確に何が間違っているのかを診断する方法がわかりません。lockステートメントがプログラムにどのように影響するかを知るにはどうすればよいですか? デッドロックがある場合、どうすればそれをキャッチできますか? 実行を中断する理由を見つけるために何をしますかlock?

4

2 に答える 2

0
lock (desiredOrdersBuy)
{
    RecalculateOrdersInternal();
}

if (Monitor.TryEnter(desiredOrdersBuy))
{
    try
    {
        RecalculateOrdersInternal();
    }
    finally
    {
        Monitor.Exit(desiredOrdersBuy);
    }
}

同じことをします。lock(){} は、Monitor.Enter/Exit のシンタックス シュガーです。

あなたの問題は、コメント付きのコードで、if(force)条件を追加でチェックすることです。

于 2012-12-26T12:26:26.353 に答える