关于async/await的疑问

l9920704 2016-07-19 06:29:01
最近在使用async await想知道如下两端代码有什么本质区别:
public async Task<byte[]> DownloadAsync(string url)
{
return await Task.Run(() =>
{
WebClient client = new WebClient();
return client.DownloadData(url);
});
}

public async Task<byte[]> DownloadAsync2(string url)
{
WebClient client2 = new WebClient();
return await client2.DownloadDataTaskAsync(url);
}

如果没有的话 是不是我有一些之前写的涉及到IO操作的同步代码 可以直接用Task.Run包装一下就能够变成异步代码从而提高系统吞吐量了?
...全文
132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果你原来全是异步回调的代码,特别是多个回调缩进是连缀嵌套的,你可以用这个语法来将代码的缩进减少减少很多层,只剩下一层。看起来清爽。 如果你原来不是异步程序,呵呵,你被这个东西彻底坑了。这个东西不是把那种“同步程序可以变成异步程序”的。你在使用它之前,必须明明白白地设计异步流程的程序,你的程序需要大改——完全在心里用异步多线程的思想编程,然后在语法上仅仅对于多层回调的语法使用这个语法来简化(只有一层异步回调,最好还是沿用清晰的回调语法)。
  • 打赏
  • 举报
回复
这两个代码执行起来没有什么区别。 但是不是说同步代码可以这样改为异步代码。你要注意到,这是用类似于同步的代码来实际上运行一部的程序,也就是说,假设你调试,它100%是异步的流程,而不是同步的流程。如果一个人不是完全的异步的设计,却来这样写代码,那么岂不是彻底蒙笔了吗?你原来的同步的代码仅仅改前缀的和返回类型的话,彻底乱了啊?!!
l9920704 2016-07-19
  • 打赏
  • 举报
回复
没人么,求解答啊

62,067

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧