我今天遇到了一段这样的 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)不被释放的方式调用?即,有没有一种方法可以在持有锁的同一线程上调用回调函数,并且在该线程释放锁之前?
编辑:messagingBus.Post(...) 可以被假定为插入到队列中,然后立即返回。回调在其他线程上调用,可能来自线程池。
对于 operation.Perform(),您可以将其读取为 Thread.Sleep(10000) - 只是运行很长时间并且不共享或改变任何状态的东西。