c# – 为什么 – 如何处理后处理交易?

前端之家收集整理的这篇文章主要介绍了c# – 为什么 – 如何处理后处理交易?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用一些环境事务范围(谢谢,entity-framework),我以前没有做过,我看到一些我想要理解的奇怪的行为.

我试图加入当前的事务范围,并在成功完成后做一些工作.我的招募参与者由于其拥有的一些资源而实施了IDisposable.我有一个简单的例子,表现出奇怪的行为.

对于这个班,

class WtfTransactionScope : IDisposable,IEnlistmentNotification
{
    public WtfTransactionScope()
    {
        if(Transaction.Current == null)
            return;
        Transaction.Current.EnlistVolatile(this,EnlistmentOptions.None);
    }
    void IEnlistmentNotification.Commit(Enlistment enlistment)
    {
        enlistment.Done();
        Console.WriteLine("Committed");
    }

    void IEnlistmentNotification.InDoubt(Enlistment enlistment)
    {
        enlistment.Done();
        Console.WriteLine("InDoubt");
    }

    void IEnlistmentNotification.Prepare(
        PreparingEnlistment preparingEnlistment)
    {
        Console.WriteLine("Prepare called");
        preparingEnlistment.Prepared();
        Console.WriteLine("Prepare completed");
    }

    void IEnlistmentNotification.Rollback(Enlistment enlistment)
    {
        enlistment.Done();
        Console.WriteLine("Rolled back");
    }

    public void Dispose()
    {
        Console.WriteLine("Disposed");
    }
}

当使用时如图所示

using(var scope = new TransactionScope())
using(new WtfTransactionScope())
{
    scope.Complete();
}

控制台输出显示重要性:

Disposed
Prepare called
Committed
Prepare completed

武汉理工大学.

在交易完成之前,我会被处理好.这种…否定了交易范围挂钩的好处.我希望一旦交易成功完成,我会被通知,否则我可以做一些工作.我不幸的是假设这将发生在scope.Complete()之后,在我离开使用范围之前被处分.这显然不是这样.

当然,我可以把它砍掉但是我有其他的问题,基本上阻止我这样做.在这种情况下,我必须舍弃和做别的事情.

我在这里做错了吗?还是这个预期的行为?可以做些不同的事情来防止这种情况发生吗?

解决方法

这是自我造成的痛苦.你违反了一个非常基本的IDisposable规则,只有当对象不再被其他任何地方使用时才被处理掉.当使用的语句调用Dispose()时,您在WtfTransactionScope构造函数中提交了对象的引用.在完成之前,您不能处理它,这意味着必须在TransactionScope的using语句完成并且事务已提交/回退之后处理它.

我会让你担心让它漂亮,但一个明显的方法是:

using(var wtf = new WtfTransactionScope())
using(var scope = new TransactionScope())
{
    wtf.Initialize();
    scope.Complete();
}

准备完成只是一个无益的调试声明.只需删除它.

原文链接:https://www.f2er.com/csharp/93208.html

猜你在找的C#相关文章