今天早上在地铁上看到一篇公众号文章,指出滥用async/await的两种情况。
如下:
一、在异步方法中返回Task。
错误调用代码示例:
var responseTask = Task.Run(() => client.GetServicesAsync(request)); ServiceResponse response = await responseTask;
正确调用代码示例:
1 ServiceResponse response = await client.GetServicesAsync(request);
这种确实属于滥用了异步调用了。
二、使用异步方法来包装同步方法
代码示例:
1 var responseTask = Task.Run(() => client.GetData(request));
公众号上说这种调用是有问题的,我看到这里就有点纳闷了,如果client.GetData(request)是一个耗时的操作怎么办,那不是一直等在这里吗。
于是我立马搜索相关资料,找到了这篇文章。
文章中指出,是可以在异步方法中包装同步调用的,但是要根据实际情况而定。
看完这篇文章,我就在想,现在的公众号写文章这么不负责吗,写得这么肯定 。
我再回到公众号上的文章,点阅读原文,进去一看,原来这两种情况是针对 Asp.Net的,他搬运的时候,把标题给精简了。
我对Web开发不熟,只是我平常在桌面开发中,肯定是需要这种包装的,否则UI线程就会卡死,界面失去响应。要不是我平常读过点书,差点被这公众号文章给骗了。
能不能使用异步方法包装同步调用?
标签:异步,调用,示例,C#,request,包装,client,中能 From: https://www.cnblogs.com/zhaotianff/p/16854014.html