Yur*_*kyy 7 c# multithreading asynchronous task-parallel-library async-await
我已经阅读了这个主题,该主题声称参考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;
}
}
Run Code Online (Sandbox Code Playgroud)
由于这段代码我得到了不同的ThreadId.为什么同一个线程获得不同的ThreadId?
Yuv*_*kov 16
您正在使用控制台应用程序作为示例.这极大地影响了您的测试结果.控制台应用程序没有自定义SynchronizationContext(如Winforms,WPF和ASP.NET),因此它使用在ThreadPoolTaskScheduler任意线程池线程上安排延续.在UI应用程序中尝试相同的示例,您将看到在同一个线程上调用的延续.
| 归档时间: |
|
| 查看次数: |
709 次 |
| 最近记录: |