gpt4 book ai didi

c# - 如何让AsyncLocal流向 sibling ?

转载 作者:太空狗 更新时间:2023-10-30 01:32:26 25 4
gpt4 key购买 nike

这是一个非常简单的例子,我希望它能工作但是......

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com