为什么等待后的代码有时会在另一个线程上运行?

时间:2017-09-07 20:09:22

标签: c# multithreading asynchronous async-await task

我是C#中异步编程的新手。请考虑以下代码段。

visit

private static async Task TestAsync(int n) { Task t = Task.Run(() => Job(ConsoleColor.DarkRed, n)); Job(ConsoleColor.DarkGreen); await t; Job(ConsoleColor.DarkBlue); } 是一个以红色背景重复打印其线程ID的任务。 t在不同的主题上运行。

同时,t以绿色背景重复打印其线程ID。当它在主线程上运行时,它总是打印1。

最后,Job(ConsoleColor.DarkGreen)仅在所有红色和绿色ID打印后重复打印蓝色背景。根据我的理解,蓝色的必须只打印1,因为它在主线程上运行。但是,当我将Job(ConsoleColor.DarkBlue)n增加到10时,我得到的结果如下:

enter image description here

90时,蓝色的那个打印的数字与主线程ID不同。

问题

为什么n=90之后的代码有时会在另一个线程上运行?

最小工作示例

await

1 个答案:

答案 0 :(得分:2)

因为它可以。

await编辑所以如果Task尚未完成,你运行的线程会回到池中,可能会做一些有用的事情。然后Taskawait完成了,所以需要一个线程继续。没有理由说它应该和以前一样。