设为首页 加入收藏

TOP

细说.NET中的多线程:使用Task(三)
2015-12-01 14:11:45 来源: 作者: 【 】 浏览:19
Tags:细说 .NET 线程 使用 Task
的。


Parallel的For,Foreach,Invoke 方法


编程过程中,我们经常会用到循环语句:


for (int i = 0; i < 10; i++)


{


? ? DoSomeWork(i);


}


如果循环过程中的工作可以是并行的话,那么我们可以用如下语句:


Parallel.For(0, 10, i => DoSomeWork(i));


我们也经常会使用Foreach来遍历某个集合:


foreach (var item in collection)


{


? ? DoSomeWork(item);


}


如果我们用一个线程池来执行里面的任务,那么我们可以写成:


Parallel.ForEach(collection, item => DoSomeWork(item));


最后,如果你想并行的执行几个不同的方法,你可以:


Parallel.Invoke(Method1, Method2, Method3);


如果你看下后台的实现,你会发现基本都是基于Task的线程池,当然你也可以通过手动创建一个Task集合,然后等待所有的任务结束来实现同样的功能。上面的Parallel.For和Parallel.Forach方法并不以为这你可以寻找你代码里面所有用到For和Foreach方法,并且替代他们,因为每一个任务都会分配一个委托,并且在线程池里执行,如果委托里面的任务是线程不安全的,你可能还需要lock来保证线程安全,使用lock本身就会造成性能上的损耗。如果每一个任务都是需要长时间执行并且线程安全的,Parallel会给你带来不错的性能提升。对于短任务,或者线程不安全的任务,你需要权衡下,你是否真的需要使用Parallel。


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇土耳其屏蔽Reddit 下一篇细说.NET中的多线程:线程池

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: