这是一个非常简单的例子,我希望它能工作但是......
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
)。
最佳答案
这就是我的发现:
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();
}
关于c# - 如何让AsyncLocal流向 sibling ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37306203/