我试图使用以下代码在线程池中运行一些任务:
private async void button1_Click(object sender, EventArgs e)
{
await test().ConfigureAwait(continueOnCapturedContext: false);
}
private Task test()
{
Thread.Sleep(100000);
return null;
}
这段代码应该在线程池中运行,然而当前的UI线程仍然被阻塞了。
有谁能帮忙看一下吗? 谢谢!
async
/await
并不意味着你的任务会在不同的线程上运行。 - dotnetomcontinueOnCapturedContext: false
将确保await
的继续不会使用SynchronizationContext
被调用,而是在ThreadPool
中完成。在你的问题中,Thread.Sleep()
只是在调用了test()
方法的同一线程上执行,因此它将阻塞。代码将同步运行,直到它遇到第一个await
。因此,test()
是同步调用的,结果(一个空的Task
)被 "awaited"。 - deloreyksynchronized
同步的还是有异步调用async
的呢? - Eldhoawait Task.Run(() =>Test());
。 - Eldho