using System.Transactions;
using System.Threading.Tasks;
public static async Task Main()
Console.WriteLine("Hello1 World");
await AsyncMethod1().ConfigureAwait(false);
Console.WriteLine($"{Transaction.Current != null} inside Main");
var tx = (CommittableTransaction)Transaction.Current;
public ExecutionContext Context { get; set; }
public Transaction Transaction { get; set; }
static async Task AsyncMethod1()
var holder = new ContextHolder();
await AsyncMethod2(holder).ConfigureAwait(false);
Transaction.Current = holder.Transaction;
await Task.Delay(50).ConfigureAwait(false);
Console.WriteLine($"{Transaction.Current != null} inside Method1");
static async Task AsyncMethod2(ContextHolder holder)
var options = new TransactionOptions{IsolationLevel = IsolationLevel.Serializable, Timeout = TimeSpan.FromSeconds(10)
var transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew, options, TransactionScopeAsyncFlowOption.Enabled);
var committableTransaction = new CommittableTransaction(options);
Console.WriteLine($"{Transaction.Current != null} inside Method2");
holder.Transaction = committableTransaction;