2010-08-05 57 views
26

Method1()實例化TransactionScope並調用Method2()也可以實例化TransactionScope時,.NET如何知道它們都在相同的範圍內? 我相信它不會在內部使用靜態方法,否則它在多線程應用程序(如ASP.NET)上將無法正常工作。TransactionScope如何工作?

是否有可能創建我自己的類似TransactionScope的類,或者原始的類是否可以使用微軟知道它們如何工作的特殊功能?

+2

有點偏離主題所以評論:靜態方法對於多線程並不是什麼大問題,它是靜態的數據,你不必擔心 – 2010-08-05 18:37:39

回答

15

希望這有助於:

http://msdn.microsoft.com/en-us/magazine/cc300805.aspx

對於那些不熟悉的TransactionScope,它是System.Transactions的一部分命名空間的新的微軟的.NET Framework 2.0。 System.Transactions提供了一個完全集成到.NET Framework中的事務框架,包括但不限於ADO.NET。 Transaction和TransactionScope類是這個命名空間中最重要的兩個類。正如問題所暗示的那樣,您可以創建一個TransactionScope實例,並且在該TransactionScope範圍內執行的ADO.NET操作將自動進行(您也可以通過Transaction.Current靜態屬性訪問當前事務):

using(TransactionScope scope = new TransactionScope()) 
{ 
    ... // all operations here part of a transaction 
    scope.Complete(); 
} 
+0

當然! 他們也可能使用Thread.SetData(): http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.THREADING.THREAD.SETDATA%29;k% 28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29; k%28DevLang-CSHARP%29&rd = true – Eduardo 2010-08-09 12:35:35

+2

此鏈接不再有效。 – 2015-06-13 16:24:59

+0

@MiklX:這真的很糟糕,請嘗試[2006年9月完整](http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineSeptember2006en-us.chm)問題。稍後我會更好地看一下。 – 2015-06-13 21:18:46

8

TransactionScope幾乎建立在COM之上 - 特別是在MSDTC

這協調交易,並允許嵌套交易。

總之,當您第一次撥打TransactionScope時,交易會註冊MSDTC,所有其他呼叫TransactionScope。 MSDTC協調它們全部。

+2

有時事務(特別是數據庫的)被提升爲DTC,但並不總是如此。 – Eduardo 2010-08-06 12:34:39

+0

@Eduardo - 的確如此。 LTM(輕量級事務管理器可能會促使事務通過MSDTC分發)。 – Oded 2010-08-06 12:50:09