请考虑以下代码
public static async Task<int> Answer()
{
await Task.Delay(1000);
return 42;
}
static void Main(string[] args)
{
for (int j = 0; j < 20; j++)
{
Console.WriteLine(j +" " + Thread.CurrentThread.IsThreadPoolThread);
if (j == 1)
{
new Task( async ()=>
{
int answer = await Answer();
Console.WriteLine(answer + " " + Thread.CurrentThread.IsThreadPoolThread);
}).Start();
}
Thread.Sleep(200);
}
return;
你能猜出CurrentThread.IsThreadPoolThread
打印时的答案是什么吗?
似乎Task.Delay(..)
正在这样做,因为如果我删除 await,那么答案是False
. 但是,我似乎找不到Delay
实际上将东西放在文档中的线程池中。
这让我想到了一个更普遍的问题。Task 中的什么实际上启动了一个线程池线程Run(..)
?
编辑:
替换new Task(...)
为Ask()
public static async void Ask()
{
int answer = await Answer();
Console.WriteLine(answer + " " + Thread.CurrentThread.IsThreadPoolThread);
}
产生相同的结果