【发布时间】:2015-12-03 20:42:36
【问题描述】:
我读过this thread,它声称引用msdn,并认为async/await 不会创建新线程。请看以下代码:
static class Program
{
static void Main(string[] args)
{
var task = SlowThreadAsync();
for(int i = 0; i < 5; i++)
{
Console.WriteLine(i * i);
}
Console.WriteLine("Slow thread result {0}", task.Result);
Console.WriteLine("Main finished on thread {0}", Thread.CurrentThread.ManagedThreadId);
Console.ReadKey();
}
static async Task<int> SlowThreadAsync()
{
Console.WriteLine("SlowThreadAsync started on thread {0}", Thread.CurrentThread.ManagedThreadId);
await Task.Delay(2000);
Console.WriteLine("SlowThreadAsync completed on thread {0}", Thread.CurrentThread.ManagedThreadId);
return 3443;
}
}
由于这段代码,我得到了不同的 ThreadId。为什么同一个线程得到不同的ThreadId?
【问题讨论】:
-
async/await自己不创建任何线程。您开始的Task可能会也可能不会创建线程。
标签: c# multithreading asynchronous async-await task-parallel-library