下面的伪代码可能有点太简单了,但这更像是一个普遍的问题
using (var thelock = await redLockFactory.CreateLockAsync())
{
await doWorkWhileLockIsOn();
}
我怎么知道在doWorkWhileLockIsOn()
锁超出范围之前在异步方法中完成的工作已经完成?
此外,如果该CreateLockAsync()
方法是可等待的,我怎么知道在我开始运行时我有锁doWorkWhileLockIsOn()
?
如果我Wait()
从事这些任务,那么使用异步有什么意义呢?
我敢肯定有一些简单的东西我没有得到,因为这看起来非常基本。后台是否发生了一些神奇的状态机,因为在调试器中运行这种代码向我展示了这将无法正常工作。
感谢您的任何建议。
为了提供更多背景知识,我正在努力使一些旧TransactionScope
代码变得异步,并且我遇到了关于在TransactionScope
与创建它的线程不同的线程上进行处理的运行时错误。代码的结构几乎与我上面的 redlock 示例相同,这让我很担心。
如何在可取消的异步/等待中处理 TransactionScope?
您可以在那里看到有一个特殊的构造函数参数,它似乎可以解决问题。所以我在“为什么?” 考虑所有这些并想知道 RedLock 会发生什么的阶段。