AsyncLocal

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}");
}
}
}