gpt4 book ai didi

c# - TransactionScope 以错误的顺序回滚

转载 作者:行者123 更新时间:2023-11-30 22:13:44 27 4
gpt4 key购买 nike

我在我的应用程序中使用了 TransactionScope 类,因为我需要以交互方式、自然地执行一些操作(要么全部成功,要么全都不成功)。

由于此操作不仅与数据库相关,我通过实现 IEnlistmentNotification 接口(interface)为磁盘和系统服务操作(例如事务性文件移动和服务停止)定义了我自己的事务性行为。毫无疑问,它工作正常,但是当我将所有这些东西放在一个应用程序中时,我得到了意想不到的结果。

想象一下下面的情况

using(var ts = ...)
{
TxServiceManager.StopServices(services);
TxFileManager.MoveFiles(files);
DbManager.RunChangeScripts(scripts);
TxServiceManager.StartServices(services);
ts.Complete();
}

在遇到需要回滚所有操作的情况之前,它一直工作得很好。它发生在启动服务时,我想,交易范围将

  1. 停止它设法启动的服务
  2. 回滚数据库
  3. 恢复文件
  4. 启动服务

但是你猜怎么着?它简单地从代码 list 中的第一个操作开始,即服务停止,当然通过启动服务回滚。好的,服务正在运行,然后在第二次操作时失败,因为我无法覆盖这些服务在运行时使用的文件。

为什么回滚从第一个操作开始而不是从最后一个操作开始?

最佳答案

因为简单(来自 MSDN ):

You should be aware that notifications might not be sent sequentially, or in a particular order.

未定义顺序。

关于c# - TransactionScope 以错误的顺序回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18888241/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com