【发布时间】:2017-01-22 22:30:46
【问题描述】:
我对 async/await 的了解是,当任务完成时,继续在调用 await 时在相同的上下文中运行,在我的情况下,这将是 UI 线程。 但我的问题是,它是否会在 IO 完成之后和移动到同一个 UI 线程之前创建一个新线程(内部)。
我正在分享一段代码。如果我点击这个按钮一次,它显示在执行await之前可用线程为1023,但之后可用线程下降到1022。虽然当我检查线程id时,它与UI线程相同。
private async void button1_ClickAsync(object sender, EventArgs e)
{
int x, y;
ThreadPool.GetAvailableThreads(out x, out y);
textBox1.Text = x.ToString()+"..."+y.ToString();
await Task.Delay(5000);
ThreadPool.GetAvailableThreads(out x, out y);
textBox1.Text = x.ToString() + "..." + y.ToString();
}
但有趣的是,当我下次单击此按钮时,可用线程数仍为 1023(等待之前和之后)。
【问题讨论】:
标签: c# multithreading asynchronous async-await