这是一个我希望工作的非常简单的例子,但是......
static AsyncLocal<bool> _value = new AsyncLocal<bool>();
static void Main(string[] args)
{
A().Wait();
}
static async Task A()
{
await B();
await C();
}
static async Task B()
{
_value.Value = true;
}
static async Task C()
{
if (!_value.Value) throw new Exception();
}
那么是否有可能以某种方式在方法B
中存储某些内容,以便C
中有值?我需要它只通过异步流程传递(请ThreadStatic
请。)
答案 0 :(得分:3)
所以这就是我发现的:
AsyncLocal
仅以一种方式转移 - 从外层到内层异步方法,所以我添加了一个B_Start
方法,在“顶层”级别初始化本地。工作代码:
class Container<T>
{
public T Value { get; set; }
}
static AsyncLocal<Container<bool>> _value = new AsyncLocal<Container<bool>>();
static void Main(string[] args)
{
A().Wait();
}
static async Task A()
{
await B_Start();
await C();
}
static Task B_Start()
{
_value.Value = new Container<bool>();
return B();
}
static async Task B()
{
_value.Value.Value = true;
}
static async Task C()
{
if (!_value.Value.Value) throw new Exception();
}