我是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
时,我得到的结果如下:
当90
时,蓝色的那个打印的数字与主线程ID不同。
为什么n=90
之后的代码有时会在另一个线程上运行?
await
答案 0 :(得分:2)
因为它可以。
你await
编辑所以如果Task
尚未完成,你运行的线程会回到池中,可能会做一些有用的事情。然后Task
你await
完成了,所以需要一个线程继续。没有理由说它应该和以前一样。