C# 等待仍然阻止当前UI线程
我尝试使用以下代码在线程池中运行某些任务:C# 等待仍然阻止当前UI线程,c#,asynchronous,async-await,C#,Asynchronous,Async Await,我尝试使用以下代码在线程池中运行某些任务: private async void button1_Click(object sender, EventArgs e) { await test().ConfigureAwait(continueOnCapturedContext: false); } private Task test() { Thread.Sleep(100000); return null; } 代码应该在线程池中运行,但是当前UI线程仍然被阻止 有人能帮忙
private async void button1_Click(object sender, EventArgs e)
{
await test().ConfigureAwait(continueOnCapturedContext: false);
}
private Task test()
{
Thread.Sleep(100000);
return null;
}
代码应该在线程池中运行,但是当前UI线程仍然被阻止
有人能帮忙看一下吗?
谢谢,您应该使用这个方法
编辑:
代码应该在线程池中运行
不,那根本不是真的<代码>异步不会在线程池线程上运行代码
我建议您阅读我的,它解释了async
的作用,以及,它专门解决了线程池的误解:
“async”关键字是否会导致方法调用排队到线程池?创建一个新线程?发射火箭飞船到火星
不,不,不
使用
async
/await
并不意味着您的任务将在不同的线程上运行。但“continueOnCapturedContext:false”是否应使其在线程池中运行?否,continueOnCapturedContext:false
将确保不会使用SynchronizationContext
调用Wait
的继续,而是在ThreadPool
中完成。在您的问题中,您的Thread.Sleep()
只是在调用test()
方法的同一线程上执行,因此它会阻塞。代码将同步运行,直到到达第一个wait
。所以同步调用test()
,结果(一个null
Task
)是“等待的”。您的test()方法是synchronized
还是具有async
调用?如果它是同步的,您可以尝试使用await Task.Run(()=>test())代码>
private async void button1_Click(object sender, EventArgs e)
{
await test();
}
private Task test()
{
return Task.Delay(100000);
}