using System.Threading.Tasks;
public static async Task Main()
await Bar.DoSomeWork("A");
await Bar.DoSomeWork("B");
Console.WriteLine("Main:{0}", Foo.AsyncLocalVar);
Console.WriteLine("Main Bar.GetAsyncLocalVar:{0}", Bar.GetAsyncLocalVar());
private static AsyncLocal<int?> asyncLocalVar = new AsyncLocal<int?>();
public static int AsyncLocalVar
get => (int)asyncLocalVar.Value;
set => asyncLocalVar.Value = new int?(value);
private static Random rnd = new Random();
public static async Task DoSomeWork(string s)
Foo.AsyncLocalVar = rnd.Next(1,99);
Console.WriteLine("{0}:{1}", s, Foo.AsyncLocalVar);
Console.WriteLine("{0} GetAsyncLocalVar:{1}", s, Bar.GetAsyncLocalVar());
public static int GetAsyncLocalVar()
return Foo.AsyncLocalVar;