我希望这是一个非常简单的示例,但是...
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流向同级?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37306203/