我编写了一个程序来检查我是否理解异步等待概念。异步并等待线程问题
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);
}
我有点迷惑,会有什么打印?
我认为我们不能保证什么都会打印
我Explantion: 当await DoAsyncWork
是调用控件回到主菜单。在DoAsyncWork
之后 完成控制返回并在等待之后继续代码的其余部分。 其余的代码可以运行,我们没有关于巫婆线程运行此代码的保证。
其实: 我运行这段代码很多时间,并得到False
打印。
你打算问同样的问题多少次? http://stackoverflow.com/questions/40577858/async-await-thread-expected – Jim
*我们没有关于巫婆线程运行此代码的保证。*如果'await'将安排继续而不是继续(因为它会做会看到已经完成的任务),那么我们保证继续将在'ThreadPool'线程之一运行。和以前一样,它不使用ThreadPool线程,它保证线程不同。 – PetSerAl
你真的应该停止反复询问同一个问题。更好地阅读这篇文章,而不是:http://blog.stephencleary.com/2012/02/async-and-await.html – VMAtm