作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个在 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/
我是一名优秀的程序员,十分优秀!