await仍会阻止当前的UI线程

时间:2016-04-12 04:10:23

标签: 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线程仍然被阻止。

所以有人可以帮忙看看吗? 感谢,

2 个答案:

答案 0 :(得分:3)

  

代码应该在线程池中运行

不,这根本不是真的。 async不会在线程池线程上运行您的代码。

我建议你阅读我的async intro,其中解释了async 做了什么,以及official async FAQ,它具体解决了线程池误解:

  

“async”关键字是否导致调用方法排队到ThreadPool?要创建新线程?发射火箭飞往火星?

     

没有。不,不。

答案 1 :(得分:1)

您应该使用Task.Delay方法。

private async void button1_Click(object sender, EventArgs e)
{
   await test();
}

private Task test()
{
    return Task.Delay(100000);
}

编辑:

Related question / answer.