3
我正在嘗試跨兩個查詢使用TransactionScope到不同的SQL Server實例(該事務被提升爲MSDTC)。我讓它在不使用任務的情況下同步工作,但無法在異步使用任務時使事務回滾。無法使用TransactionScope與任務
我已經隱藏了連接字符串到服務器和更新語句,但確保他們都連接和執行沒有問題的SQL。我有意將方法runTwo()
中的SQL設置爲失敗並引發異常。
我使用.Net 4.5.2,其中包括枚舉TransactionScopeAsyncFlowOption.Enabled
(在TransactionScope構造函數中),我認爲它應該處理跨線程的事務,但無法使其工作。
static void Main()
{
List<Task> tasks = new List<Task>();
using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
try
{
tasks.Add(Task.Run(() => runOne()));
tasks.Add(Task.Run(() => runTwo()));
Task.WhenAll(tasks);
//Complete the scope
scope.Complete();
}
catch (Exception)
{
Transaction.Current.Rollback();
}
}
Console.ReadLine();
}
private static void runOne()
{
//Get the base SQL connection
using (SqlConnection conn = new SqlConnection("Data Source=SERVER1....."))
{
conn.Open();
SqlCommand command1 = new SqlCommand
{
CommandText = "Update .. Complete Successfully",
CommandType = CommandType.Text,
Connection = conn
};
command1.ExecuteNonQuery();
}
}
private static void runTwo()
{
using (
SqlConnection conn =
new SqlConnection("Data Source=SERVER2...")
)
{
conn.Open();
SqlCommand command2 = new SqlCommand
{
CommandText = "Update .... Raises Exception",
CommandType = CommandType.Text,
Connection = conn
};
//Execute the command
command2.ExecuteNonQuery();
}
}