处理异步 MVC 操作中的事务
Handling transactions in asynchronous MVC actions
我想知道在异步 MVC 操作中处理事务的 good/safe 方法是什么。特别是 MSMQ 事务。我目前正在使用一个动作过滤器在同步动作中处理它们,该动作过滤器在 OnActionExecuting 中创建事务对象,将其保存到静态 class 中的线程本地存储,然后提交(如果适用)并销毁 OnActionExecuted 中的事务。
我猜在这里使用 TLS 会在异步操作中崩溃。
除了将事务实例传递给每个方法调用之外,是否有 good/robust 方法在异步操作中完成此操作?
我想(我还没有测试过)System.Web.Mvc.IActionFilter
的 OnActionExecuting/OnActionExecuted
仍然在异步 MVC 操作的开始和结束时被调用,很像同步操作.
如果这是真的,只需在 OnActionExecuting
处使用 CallContext.LogicalSetData
并在 OnActionExecuted
处使用 CallContext.LogicalGetData
而不是 described by Stephen Cleary in his blog 中的 TLS。您的事务状态将在 await
延续时跨线程流动。
我想知道在异步 MVC 操作中处理事务的 good/safe 方法是什么。特别是 MSMQ 事务。我目前正在使用一个动作过滤器在同步动作中处理它们,该动作过滤器在 OnActionExecuting 中创建事务对象,将其保存到静态 class 中的线程本地存储,然后提交(如果适用)并销毁 OnActionExecuted 中的事务。
我猜在这里使用 TLS 会在异步操作中崩溃。
除了将事务实例传递给每个方法调用之外,是否有 good/robust 方法在异步操作中完成此操作?
我想(我还没有测试过)System.Web.Mvc.IActionFilter
的 OnActionExecuting/OnActionExecuted
仍然在异步 MVC 操作的开始和结束时被调用,很像同步操作.
如果这是真的,只需在 OnActionExecuting
处使用 CallContext.LogicalSetData
并在 OnActionExecuted
处使用 CallContext.LogicalGetData
而不是 described by Stephen Cleary in his blog 中的 TLS。您的事务状态将在 await
延续时跨线程流动。