gpt4 book ai didi

c# - 我如何知道异步方法调用是否更改了调用者的上下文?

转载 作者:太空狗 更新时间:2023-10-29 22:21:16 26 4
gpt4 key购买 nike

考虑这个例子:

async Task Foo()
{
button.Text = "This is the UI context!";

await BarA();

button.Text = "This is still the UI context!";

await BarB();

button.Text = "Oh no!"; // exception (?)
}

async Task BarA()
{
await Calculations();
}

async Task BarB()
{
await Calculations().ConfigureAwait(false);
}

我如何知道调用 await BarB() 是否更改了上下文而不读取 async Task BarB() 函数的主体?我真的需要确切地知道异步函数是否在任何时候调用 ConfigureAwait(false) 吗?或者示例可能是错误的并且没有异常(exception)?

最佳答案

BarB() 做什么在很大程度上是无关紧要的,除非 BarB() 需要与 UI 对话。这里的重要部分是行中的 await:

await BarB();

await 也捕获上下文 - 如果它发现自己从错误的上下文。所以;除非你写:

await BarB().ConfigureAwait(false);

你在这里应该没问题。

BarB() 中的 ConfigureAwait(false) 看起来正常并且可能是正确的,如果我们假设 BarB() 不需要直接更新 UI 或执行任何其他上下文绑定(bind)操作。

关于c# - 我如何知道异步方法调用是否更改了调用者的上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54669098/

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