今日、次のような C# コードを見つけました。
lock(obj)
{
// perform various operations
...
// send a message via a queue but in the same process, Post(yourData, callback)
messagingBus.Post(data, () =>
{
// perform operation
...
if(condition == true)
{
// perform a long running, out of process operation
operation.Perform();
}
}
}
私の質問はこれです: operation.Perform() が呼び出される前に lock(obj) が解放されないように、コールバック関数を呼び出すことはできますか? つまり、ロックを保持している同じスレッドで、そのスレッドがロックを解放する前に、コールバック関数を呼び出す方法はありますか?
EDIT:messagingBus.Post(...)は、キューへの挿入であると見なすことができ、すぐに戻ります。コールバックは、おそらくスレッド プールから、他のスレッドで呼び出されます。
operation.Perform() については、 Thread.Sleep(10000) として読み取ることができます。これは、長時間実行され、状態を共有または変更しないものです。