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();

最新文章

  1. F#之旅5 - 小实践之下载网页(爬虫基础库)
  2. C# random helper class
  3. 一步一步来做WebQQ机器人-(五)(发送消息||完结)
  4. spring IOC核心原理
  5. CSS3属性
  6. ural 2073. Log Files
  7. Ubuntu安装SSH服务
  8. 夺命雷公狗---TP商城----TP之样式和特效以及图片引入---2
  9. (转)直接拿来用!最火的iOS开源项目(二)
  10. C语言运算符表
  11. POJ 2531 Network Saboteur
  12. ecstore后台规格超过一定数量保存丢失
  13. hdu_5898_odd-even number(数位DP)
  14. [51nod Round15 E ]Danganronpa
  15. Codeforces Round #395 (Div. 2)(未完)
  16. chrome使用Timeline做性能分析
  17. Java中 float、double使用注意问题
  18. SSM+shiro及相关插件的整合maven所有依赖,详细注释版,自用,持续更新
  19. SpringBatch 错误积累
  20. 【代码审计】XYHCMS V3.5任意文件删除漏洞分析

热门文章

  1. php-图片加水印和文字
  2. 阿里PB级Kubernetes日志平台建设实践
  3. VS2017调试程序时 无法启动web iis或者提示ID为***的进程未启动
  4. redis配置文件讲解
  5. Ubuntu + Apache2 环境下用C编写 一个简单的cgi脚本
  6. 002-创建型-03-单例模式(Singleton)【7种】、spring单例及原理
  7. 算法习题---4.4信息解码(UVa213)
  8. Linux 7 关闭、禁用防火墙服务
  9. 用python查看文件是否存在的三种方式
  10. MySQL复制表结构