0

下面的伪代码可能有点太简单了,但这更像是一个普遍的问题

using (var thelock = await redLockFactory.CreateLockAsync())  
{
    await doWorkWhileLockIsOn();
}

我怎么知道在doWorkWhileLockIsOn()锁超出范围之前在异步方法中完成的工作已经完成?

此外,如果该CreateLockAsync()方法是可等待的,我怎么知道在我开始运行时我有锁doWorkWhileLockIsOn()

如果我Wait()从事这些任务,那么使用异步有什么意义呢?

我敢肯定有一些简单的东西我没有得到,因为这看起来非常基本。后台是否发生了一些神奇的状态机,因为在调试器中运行这种代码向我展示了这将无法正常工作。

感谢您的任何建议。

为了提供更多背景知识,我正在努力使一些旧TransactionScope代码变得异步,并且我遇到了关于在TransactionScope与创建它的线程不同的线程上进行处理的运行时错误。代码的结构几乎与我上面的 redlock 示例相同,这让我很担心。

如何在可取消的异步/等待中处理 TransactionScope?

您可以在那里看到有一个特殊的构造函数参数,它似乎可以解决问题。所以我在“为什么?” 考虑所有这些并想知道 RedLock 会发生什么的阶段。

4

1 回答 1

0

在周五下午晚些时候筋疲力尽和沮丧时,我需要停止发布问题。

我深入研究了 RedlockFactory 的源代码和测试代码,我最初认为根本不起作用的所有东西似乎都工作得很好,无论是阅读代码还是使用调试器。

我真正的恐慌来自我在编辑的原始问题中提到的 TransactionScope 问题,那里的问题似乎与 RedlockFactory 或任何其他实现 DisposeAsync 的项目的工作方式无关。

于 2021-10-10T22:10:05.827 回答