【问题标题】:Handling transactions in asynchronous MVC actions在异步 MVC 操作中处理事务
【发布时间】:2015-01-25 01:50:04
【问题描述】:

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

我猜这里使用 TLS 会分解为异步操作。

除了将事务实例传递给每个方法调用之外,是否有一种好的/稳健的方法可以在异步操作中完成此任务?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 是的,仍然像以前一样调用 OnActionExecuting 和 OnActionExecuted。逻辑 CallContext 似乎是我的人。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    相关资源
    最近更新 更多