任务并行库 (TPL) 基于“任务”的概念,可代表异步操作。 在某些方面,任务类似于线程或 ThreadPool 工作项,但是抽象级别更高。 术语“任务并行”是指一个或多个独立的任务同时运行。 任务提供两个主要好处:
-
系统资源的使用效率更高,可伸缩性更好。
在后台,任务排队到 ThreadPool,其已使用算法进行增强,这些算法能够确定并调整到可提供最大化吞吐量负载平衡的线程数。 这会使任务相对轻量,您可以创建很多任务以启用细化并行。
-
对于线程或工作项,可以使用更多的编程控件。
任务和围绕它们生成的框架提供了一组丰富的 API,这些 API 支持等待、取消、继续、可靠的异常处理、详细状态、自定义计划等功能
//并行执行方法 ALL_Products是一个方法 System.Threading.Tasks.Parallel.Invoke(() => ALL_Products(iWine)); /// <summary> ///好评排行(重新赋值)循环并行处理 /// </summary> /// <param name="OladData">产品好评</param> /// <returns></returns> private List<ChartProScoreDto> Copey_Pro2(List<ChartProScoreDto> OladData) { List<ChartProScoreDto> utlist = new List<ChartProScoreDto>(); if (OladData == null) { return utlist; } System.Threading.Tasks.Parallel.ForEach(OladData,item => { //foreach (ChartProScoreDto item in OladData) // { ChartProScoreDto NewPro = new ChartProScoreDto(); EnYuan.DEV.Mongo.EntityHelper.CopyProperties(item, ref NewPro); var place = Get_TastPlace(item.PlaceId); var pro = GetProduct(item.ProId); if (place != null) { NewPro.PlaceId = place.Name; } if (pro != null) { NewPro.ProId = pro.Name; } lock (utlist) { utlist.Add(NewPro); } // } }); return utlist; }
更多介绍到:http://msdn.microsoft.com/zh-cn/library/dd537609(v=vs.110).aspx