任务并行库 (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.OrderByDescending(c => c.Score).ToList();
}
更多介绍到:http://msdn.microsoft.com/zh-cn/library/dd537609(v=vs.110).aspx