現在使用 Async 這種非同步寫法算是家常便飯了,但某些時候會遇到問題,像是 transaction,主要的問題是 Async 會切換執行緒,但在 transaction 中遇到執行緒的切換時會出錯(正確來說是偵測到執行緒不同條),解法也很簡單,就是加個參數就好,範例如下:

using (TransactionScope tran = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
    await AsyncWorker1();
    await AsyncWorker2();
    await AsyncWorker3();
}

這樣問題就解決了。

參考資料