【发布时间】:2012-11-01 10:21:19
【问题描述】:
请考虑以下代码
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(..) 正在这样做,因为如果我删除等待,那么答案就是False。但是,我似乎找不到 Delay 实际上在文档中将东西放在线程池中。
这让我想到了更一般的问题。除了Run(..)之外,Task实际上启动了一个线程池线程吗?
编辑:
将new Task(...) 替换为Ask()
public static async void Ask()
{
int answer = await Answer();
Console.WriteLine(answer + " " + Thread.CurrentThread.IsThreadPoolThread);
}
产生相同的结果
【问题讨论】:
标签: c# multithreading threadpool