AsyncLocal<string> data = new AsyncLocal<string>(); data.Value = "lcc"; for (int i = 0; i < 20; i++) { var current = i; Thread.Sleep(500 * current); Task.Run(() => { Console.WriteLine($"-----[{current}]-----Begin:{data.Value}"); data.Value = current + "lcc"; Console.WriteLine($"-----[{current}]-----End:{data.Value}"); }); Console.WriteLine($"-----[{current}]-----Current:{data.Value}"); } Console.ReadLine();
運行結果:
這是棧逃逸
CallContext (線程上下文)
LogicalCallContext
ExecutionContext(執行上下文)
AsyncLocal (多線程共享變量)
ThreadLocal (線程內變量)