4

.NET Framework 4.5.1 在异步方法中引入了事务支持,例如:

using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
    var result = await DoWorkAsync(cancellationToken)
        .ConfigureAwait(false);

    await DoMoreWorkAsync(result, cancellationToken)
        .ConfigureAwait(false);

    scope.Complete(); // commit to perform all operations above
}

参考:https ://msdn.microsoft.com/en-us/library/dn261473(v=vs.110).aspx

这也可以在 Azure WebJobs 异步功能中使用,以收紧工作单元并在主机关闭的情况下提供更好的幂等操作吗?如果是这样,它会对性能产生任何影响吗?

更新:

看起来服务总线队列(标准层)支持事务(单级),但存储队列不支持。参考:https ://msdn.microsoft.com/en-us/library/azure/hh767287.aspx 上的“基础功能”部分

4

1 回答 1

0

无论谁调用您的代码,数据库访问的工作方式都是相同的。无论是 ASP.NET、WCF 还是一些 Azure 框架。

您确实可以使用事务来使您正在执行的工作具有原子性。这基本上是一件好事。例如,您可以原子地检查给定的队列消息或任何已经处理过的消息。如果你只是简单地退出,那么你就是幂等的。

性能影响不受 WebJobs 的影响。除非您使用要避免的分布式事务,否则事务非常便宜。

于 2015-04-30T21:42:44.950 回答