C# Task.WhenAll
2024-09-01 14:30:38
1、有时候我们需要同时执行一些操作,然后把这些操作的结果进行汇总,以达到用异步处理降低操作耗时的效果,此时我们会考虑使用Task,而Task.WhenAll则排上了用场。
public void IssueStatistics()
{
var task = GetIssueStatisticsAsync();
var dtRet = task.Result;
}
private async Task<DataTable> GetIssueStatisticsAsync()
{
var taskList = new List<Task<DataTable>>
{
GetIssueDataAsync(),
GetB2CIssueDataAsync()
}; var tasks = taskList.ToArray();
var tables = await Task.WhenAll(tasks).ConfigureAwait(false); var retDt = orderDAL.CreateIssueDataTable();
for (int index = ; index < tables.Length; index++)
{
for (int k = ; k < tables[index].Rows.Count; k++)
{
retDt.ImportRow(tables[index].Rows[k]);
}
}
return retDt;
} private Task<DataTable> GetIssueDataAsync()
{
return Task.Run(() =>
{
var dt = orderDAL.GetIssueDataOfOrder();
return dt;
});
} private Task<DataTable> GetB2CIssueDataAsync()
{
return Task.Run(() =>
{
var dt = orderDAL.GetIssueDataOfB2C();
return dt;
});
}
这里有个地方需要注意的,如果不是在控制台应用程序,那么需要在Task.WhenAll后面加 ConfigureAwait(false),不然无法返回当前线程。
当然,按照官网的实例写法,你也可以这样写:
private async Task<int> ExecuteDataAsync()
{
var dtRecord = _dao.GetDataOfStockOut();
var dataList = _comDao.ToSyncDataList(dtRecord);
if (dataList == null) return ; var tasksQuery = from data in dataList select DoRunIssueDataAsync(data);
var tasks = tasksQuery.ToArray(); int[] flags = await Task.WhenAll(tasks);
int total = flags.Sum();
return total;
} private async Task<int> DoRunIssueDataAsync(SyncDataM data)
{
return await Task.Run(() =>
{
//要处理的事情
return ;
});
}
这样调用就可以了:
var task = ExecuteDataAsync();
task.Wait();
最新文章
- F#之旅5 - 小实践之下载网页(爬虫基础库)
- C# random helper class
- 一步一步来做WebQQ机器人-(五)(发送消息||完结)
- spring IOC核心原理
- CSS3属性
- ural 2073. Log Files
- Ubuntu安装SSH服务
- 夺命雷公狗---TP商城----TP之样式和特效以及图片引入---2
- (转)直接拿来用!最火的iOS开源项目(二)
- C语言运算符表
- POJ 2531 Network Saboteur
- ecstore后台规格超过一定数量保存丢失
- hdu_5898_odd-even number(数位DP)
- [51nod Round15 E ]Danganronpa
- Codeforces Round #395 (Div. 2)(未完)
- chrome使用Timeline做性能分析
- Java中 float、double使用注意问题
- SSM+shiro及相关插件的整合maven所有依赖,详细注释版,自用,持续更新
- SpringBatch 错误积累
- 【代码审计】XYHCMS V3.5任意文件删除漏洞分析