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);
}