我正在尝试使用一些环境事务范围(谢谢,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()之后,在我离开使用范围之前被处分.这显然不是这样.
当然,我可以把它砍掉但是我有其他的问题,基本上阻止我这样做.在这种情况下,我必须舍弃和做别的事情.
我在这里做错了吗?还是这个预期的行为?可以做些不同的事情来防止这种情况发生吗?
解决方法
原文地址:https://www.jb51.cc/csharp/93208.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。