【问题标题】:Super basic questions about using RedLockFactory.CreateLockAsync()关于使用 RedLockFactory.CreateLockAsync() 的超级基本问题
【发布时间】:2021-10-09 01:44:29
【问题描述】:

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

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

我如何知道在 async doWorkWhileLockIsOn() 方法中完成的工作在锁超出范围之前完成了?

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

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

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

感谢您的建议。

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

How to dispose TransactionScope in cancelable async/await?

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

【问题讨论】:

  • 谢谢。我正在尝试将异步带入一个完整的框架 asp.net 应用程序,但每个新情况仍然令人迷惑。我遇到了上面的问题,因为我刚刚处理了一个与 TransactionScope 非常相似的问题,在这里很好地总结了:stackoverflow.com/questions/12724529/…。它与作用域异步对象存在同样的问题,但 TransactionScope 提供了一个构造函数参数,该参数提供了看起来像“魔法管道”的东西,所以我想知道 Redlock 会发生什么。

标签: c# .net redlock.net


【解决方案1】:

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

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

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

【讨论】:

  • 如果这样可以解决问题,请考虑接受您自己的答案
猜你喜欢
  • 2021-09-26
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多