【发布时间】:2012-11-24 16:47:09
【问题描述】:
我正在尝试将async/await 集成到我们的服务总线中。
我基于这个例子http://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259049.aspx实现了一个SingleThreadSynchronizationContext。
它工作正常,除了一件事:TransactionScope。我等待TransactionScope 里面的东西,它打破了TransactionScope。
TransactionScope 似乎不能与async/await 配合使用,这肯定是因为它使用ThreadStaticAttribute 在线程中存储东西。我得到了这个例外:
“TransactionScope 嵌套不正确。”。
我尝试在排队任务之前保存TransactionScope 数据并在运行它之前恢复它,但它似乎并没有改变任何事情。而且TransactionScope 的代码是一团糟,所以很难理解那里发生了什么。
有没有办法让它工作? TransactionScope 有什么替代品吗?
【问题讨论】:
-
这是一个非常简单的代码来重现 TransactionScope 错误pastebin.com/Eh1dxG4a,除了这里的异常是 Transaction Aborted
-
你能不能只使用一个普通的 SQL 事务?还是您跨越多个资源?
-
我跨越多个资源
-
看起来您需要将范围传递给您的异步方法,或者提供一种从您的工作单元标识的某种常见上下文中检索它的方法。
-
对于每个顶级
TransactionScope,您需要一个带有自己的SingleThreadSynchronizationContext的单独线程。
标签: c# transactionscope async-await