【发布时间】:2013-07-01 17:27:56
【问题描述】:
我正在调查异步,我遇到了以下我无法解释的结果。
以下代码(可以复制/粘贴到 Linqpad 或类似代码中)给我带来了使用线程池中的三个线程的令人惊讶的结果。
void Main()
{
Wait();
}
public async void Wait()
{
Print ("Wait() called. Calling GetAnswer()");
var t = await GetAnswerAsync3();
Print("Result of Wait(): " + t);
}
public Task<bool> GetAnswerAsync3()
{
return Task.Run(() => {
// Thread.Sleep(1000);
Print("GetAnswerAsync3() called");
return true;
});
}
public void Print(string message)
{
Console.WriteLine ("Thread: " + Thread.CurrentThread.ManagedThreadId + " - " + message);
}
结果是:
Thread: 35 - Wait() called. Calling GetAnswer()
Thread: 51 - GetAnswerAsync3() called
Thread: 43 - Result of Wait(): True
显示涉及三个线程。
现在。如果我在GetAnswerAsync3 返回的任务返回之前添加Thread.Sleep(1000),结果现在只有两个线程在运行!也许这可能是因为线程池重用了一个线程?
为什么这里有三个不同的线程在起作用?
【问题讨论】:
标签: c# .net async-await