當Method1()
實例化TransactionScope
並調用Method2()
也可以實例化TransactionScope
時,.NET如何知道它們都在相同的範圍內? 我相信它不會在內部使用靜態方法,否則它在多線程應用程序(如ASP.NET)上將無法正常工作。TransactionScope如何工作?
是否有可能創建我自己的類似TransactionScope的類,或者原始的類是否可以使用微軟知道它們如何工作的特殊功能?
當Method1()
實例化TransactionScope
並調用Method2()
也可以實例化TransactionScope
時,.NET如何知道它們都在相同的範圍內? 我相信它不會在內部使用靜態方法,否則它在多線程應用程序(如ASP.NET)上將無法正常工作。TransactionScope如何工作?
是否有可能創建我自己的類似TransactionScope的類,或者原始的類是否可以使用微軟知道它們如何工作的特殊功能?
希望這有助於:
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(); }
當然! 他們也可能使用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
此鏈接不再有效。 – 2015-06-13 16:24:59
@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
有點偏離主題所以評論:靜態方法對於多線程並不是什麼大問題,它是靜態的數據,你不必擔心 – 2010-08-05 18:37:39