gpt4 book ai didi

c# - ConfigureAwait(false) 不会使继续代码在另一个线程中运行

转载 作者:行者123 更新时间:2023-12-05 08:22:30 25 4
gpt4 key购买 nike

我有一个在 thread1 上运行的代码。我以同步方式调用函数(使用异步方法但它不应该打扰我 - 异步方法不会将代码变为异步)。

我有一个 ConfigureAwait 设置为 false 的 await,所以我理解它之后的代码是一个任务延续,它假设在一个不同的线程中运行,而不是等待之前的代码(因为 ConfigureAwait 被设置为 false)。

根据我的测试——所有代码都在同一个线程中运行。如何?为什么 await 下面的代码不在不同的线程上运行?这是代码:

public async void F1()
{
Console.WriteLine($"Thread.CurrentThread.ManagedThreadId={Thread.CurrentThread.ManagedThreadId}");
int x = await F2().ConfigureAwait(false);
Console.WriteLine($"Thread.CurrentThread.ManagedThreadId={Thread.CurrentThread.ManagedThreadId}");
}

private async Task<int> F2()
{
Console.WriteLine("Begins F2");
Console.WriteLine($"Thread.CurrentThread.ManagedThreadId={Thread.CurrentThread.ManagedThreadId}");
Console.WriteLine("Finishes F2");
return 7;
}

这是输出:

Thread.CurrentThread.ManagedThreadId=1
Begins F2
Thread.CurrentThread.ManagedThreadId=1
Finishes F2
Thread.CurrentThread.ManagedThreadId=1

最佳答案

它不是“应该在不同的 线程 上下文中运行”,它是允许的。在相反的情况下 (ConfigureAwait(true)),它必须在相同的 thread 上下文中继续。

此外,当没有什么可等待时(在方法内部),“异步”方法同步运行,因此不需要返回到某个 线程 上下文,它还在上面。

关于c# - ConfigureAwait(false) 不会使继续代码在另一个线程中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61955397/

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