AsyncLocal
作用于共享的变量,如 static 修饰的变量,
在切换执行上下文时(async / await ),在每个执行上下文中独立变化,
什么意思呢?
就是假如共享变量 sharedVar 在 await 的语句中能够访问和修改,那么 await 中对共享变量 sharedVar 所作的修改,仅在 await 的上下文中可见,
当回到 调用 await 的上下文时(父上下文),共享变量 sharedVar 的值 仍然是 调用 await 之前的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| using System; using System.Collections.Generic; using System.Text.Json; using System.Threading; using System.Threading.Tasks;
namespace ThreadAndAsyncTest { class Program { public static AsyncLocal<int> _myvar = new AsyncLocal<int>();
public static void Main(string[] args) { _myvar.Value = 1;
Task.Run(() => { Console.WriteLine($"异步方法内,修改之前:{_myvar.Value}"); _myvar.Value = 2; Console.WriteLine($"异步方法内,修改之后:{_myvar.Value}"); }).Wait();
Console.WriteLine($"异步之后:{_myvar.Value}"); } } }
|