处理异步MVC操作中的事务

时间:2015-01-25 01:50:05

标签: c# asp.net-mvc async-await

我想知道在异步MVC操作中处理事务的好/安全方法是什么。特别是MSMQ交易。我目前正在使用动作过滤器在同步操作中处理它们,动作过滤器在OnActionExecuting中创建事务对象,将其保存到静态类中的线程本地存储,然后提交(如果适用)并销毁OnActionExecuted中的事务。

我猜这里使用TLS会在异步操作中崩溃。

除了将事务实例传递给每个方法调用之外,还有一种好的/可靠的方法可以在异步操作中实现吗?

1 个答案:

答案 0 :(得分:1)

我想(我还没有测试过),System.Web.Mvc.IActionFilterOnActionExecuting/OnActionExecuted仍然在异步MVC动作的开始和结束时被调用,就像同步动作一样。 / p>

如果这是真的,只需使用CallContext.LogicalSetData上的OnActionExecutingCallContext.LogicalGetData OnActionExecuted代替TLS,described by Stephen Cleary in his blog。您的事务状态将在await延续时跨线程流动。