using System.Threading.Tasks;
public static void Main()
public async void Run(string s)
Console.WriteLine(Bar.AsyncLocalVar);
Console.WriteLine(Bar.AsyncLocalVar);
public async static void Run(string s)
Console.WriteLine(Bar.AsyncLocalVar);
Console.WriteLine(Bar.AsyncLocalVar);
public class FooStaticChild
public async static void Run(string s)
Console.WriteLine(Bar.AsyncLocalVar);
await Bar.DoSomeChildWork();
Console.WriteLine(Bar.AsyncLocalVar);
private static Random rnd = new Random();
private static AsyncLocal<int?> asyncLocalVar = new AsyncLocal<int?>();
public static int AsyncLocalVar
get => asyncLocalVar.Value ?? rnd.Next(1,99);
set => asyncLocalVar.Value = new int?(value);
public static Task DoSOmeAsync()
AsyncLocalVar = rnd.Next(1,10);
Console.WriteLine(AsyncLocalVar);
var bb = Task.FromResult("aaaa");
public static Task DoSomeChildWork()
AsyncLocalVar = rnd.Next(1,10);
Console.WriteLine(AsyncLocalVar);
var bb = Task.FromResult("aaaa");
public static class BarChild
public static void DoSomeWork()
Console.WriteLine("Child Work");
Console.WriteLine(Bar.AsyncLocalVar);