我一直在考虑C#5中新的异步内容,并提出了一个特别的问题.
我知道await关键字是一个简洁的编译器技巧/语法糖来实现连续传递,其中方法的其余部分被分解为Task对象并排队以按顺序运行,但是控制返回到调用方法.
我的问题是,我听说目前这一切都在一个线程上.这是否意味着这种异步内容实际上只是将连续代码转换为Task对象然后Application.DoEvents()在每个任务完成之后调用,然后再开始下一个任务?
或者我错过了什么?(问题的这一部分是修辞 - 我完全清楚我错过了什么 :))
我正在学习C#中的异步编程.在此文章中,我发现,对于IO绑定操作,你不应该使用Task.Run(),但我不知道如何创建无Task.Run()任务......比如我想创建一个名为自定义方法GetPageCountAsync,查询数据库并返回结果.我有方法GetPageCount已经查询数据库同步.我不知道比以下更好的方式:
private async Task<int> GetPageCountAsync()
{
return await Task.Run(() => GetPageCount());
}
Run Code Online (Sandbox Code Playgroud)
没有Task.Run怎么做?我找到了SqlCommand类的ExecuteReaderAsync方法,但我想知道这个方法是如何实现的?没有Task.Run?如果是这样,怎么样?