c# - Have lots of Async calls, how to make it faster?
问题描述
I have a API call, inside the API call, it has lots of async calls. the code looks like:
.....
var getFeaturedTask = await _listingProxy.GetFeaturedListingsAsync(request);
var getRentalTask = await _listingProxy.GetRentalsAsync(request);
var getContactTask = await _contactProxy.GetLeadContactAsync(request);
var getSignTask = await _signProxy.GetListingSignsAsync(request);
var getTextTask = await _signProxy.GetTextCodeForListingAsync(request);
......
There are more than 20 tasks. I'm wondering whether there is a way to make this part of the code run faster. For example, should I use below code and it will be faster?
var getFeaturedTask = _listingProxy.GetFeaturedListingsAsync(request);
var getRentalTask = _listingProxy.GetRentalsAsync(request);
var getContactTask = _contactProxy.GetLeadContactAsync(request);
var getSignTask = _signProxy.GetListingSignsAsync(request);
......
Task.WaitAll(new Task[] { getFeaturedTask, getRentalTask, getContactTask, getSignTask, ... });
Any other possibilities? Or, no matter what, the time we may save is very small, not worth it?
Thanks
解决方案
WhenAll
是进行异步并发的适当方法:
var getFeaturedTask = _listingProxy.GetFeaturedListingsAsync(request);
var getRentalTask = _listingProxy.GetRentalsAsync(request);
var getContactTask = _contactProxy.GetLeadContactAsync(request);
var getSignTask = _signProxy.GetListingSignsAsync(request);
......
await Task.WhenAll(getFeaturedTask, getRentalTask, getContactTask, getSignTask, ...);
此代码块将同时运行所有异步请求。如果它们是真正的异步操作(即,不使用异步签名阻塞),并且它们花费的时间足够长以WhenAll
克服(小)额外开销,并且没有额外的节流系统(即,如果代理只允许每个 IP 一次请求一个请求或类似的东西),那么这个块应该运行得更快。
推荐阅读
- vue.js - 输入字段从另一个组件触发观察者
- javascript - 如何在 jest 中测试 if 条件和 return 语句?
- javascript - 如何模拟/监视来自不同文件的函数调用
- scala - 如何在 self-types 中自动继承 mixin 泛型类型?
- r - 为ggplot准备数据?多变量
- google-cloud-platform - 通过谷歌云部署管理器创建的谷歌数据流
- cloud - 尝试在免费层 (lite) 中配置服务时,我在 IBM 云中遇到以下错误
- vb.net - 标签不显示进度条 % VB.Net
- regex - 如何在正则表达式中使用条件替换**ALL**
- json - VS Code 中 settings.json 中的尾随逗号错误