我想知道在异步MVC操作中处理事务的好/安全方法是什么。特别是MSMQ交易。我目前正在使用动作过滤器在同步操作中处理它们,动作过滤器在OnActionExecuting中创建事务对象,将其保存到静态类中的线程本地存储,然后提交(如果适用)并销毁OnActionExecuted中的事务。
我猜这里使用TLS会在异步操作中崩溃。
除了将事务实例传递给每个方法调用之外,还有一种好的/可靠的方法可以在异步操作中实现吗?
答案 0 :(得分:1)
我想(我还没有测试过),System.Web.Mvc.IActionFilter
的OnActionExecuting/OnActionExecuted
仍然在异步MVC动作的开始和结束时被调用,就像同步动作一样。 / p>
如果这是真的,只需使用CallContext.LogicalSetData
上的OnActionExecuting
和CallContext.LogicalGetData
OnActionExecuted
代替TLS,described by Stephen Cleary in his blog。您的事务状态将在await
延续时跨线程流动。