我正在尝试理解async / await并阅读了大量文章,但我仍然对同步/异步性质感到困惑.
我有以下测试控制台应用程序:
static void Main(string[] args) { var test = FooAsync(); Console.WriteLine("After FooAsync"); for (int i = 0; i < 100; i++) Console.WriteLine("After that"); Console.ReadKey(); } private static async Task FooAsync() { Console.WriteLine("Before delay"); await Task.Delay(1); Console.WriteLine("After delay"); }
Before delay After FooAsync After that After that After that After that After delay After that . .
我知道async / await不会创建一个单独的线程进行处理,并且当FooAsync到达await Task.Delay(1)行时,它将返回Main,因为任务还没有完成,但是,因为我们是只有在单个线程上运行才能解释是什么触发FooAsync方法在Main之前的某个任意点恢复,然后Main可以继续?
更新
我把它拿回来,i3arnon和dariogriffo是正确的.代码确实使用了多个线程(正如我之前看到的那样,在调试器中查看或完成了kha建议的显而易见的事情).我对下一页https://msdn.microsoft.com/en-us/library/hh191443.aspx#BKMK_Threads中的“线程”部分感到困惑,没有意识到“延续”实际上是指一旦“等待”任务完成就立即运行的继续任务计划.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。