【发布时间】:2017-04-01 13:50:48
【问题描述】:
我编写了一个程序来检查我是否理解 async-await 的概念。
static void Main(string[] args)
{
Run2().Wait();
}
static async Task DoAsyncWork()
{
await Task.Delay(2000);
}
static async Task Run2()
{
var tid = Thread.CurrentThread.ManagedThreadId;
await DoAsyncWork();
Console.WriteLine(tid == Thread.CurrentThread.ManagedThreadId);
}
我有点迷茫,打印出来的是什么?
我认为我们无法保证会打印什么
我的解释:
当await DoAsyncWork 被调用时,控制返回到Main。
在DoAsyncWork 完成控制返回并在等待之后继续其余代码。
其余代码可以运行,我们无法保证女巫线程运行此代码。
其实:
我运行这段代码很多时间并得到False 打印。
【问题讨论】:
-
你要问多少次同一个问题? stackoverflow.com/questions/40577858/…
-
我们无法保证女巫线程运行此代码。 如果
await将安排继续而不是继续(如果看到已经完成的任务就会这样做),那么我们保证继续将在ThreadPool线程之一上运行。和之前的await一样,它不使用ThreadPool线程,那么它保证线程会不同。 -
你真的应该停止一次又一次地问同样的问题。最好阅读这篇文章:blog.stephencleary.com/2012/02/async-and-await.html
标签: c# async-await task-parallel-library