java parallel.invoke_看看Parallel中高度封装的三个方法,Invoke,For和ForEach

本文深入探讨了Java中并行编程的Parallel.Invoke方法,包括其实现细节和潜在风险。文章通过示例展示了如何使用Invoke进行并发操作,如信用卡扣款和发送邮件。同时,讨论了Invoke的内部实现,如任务调度和异常处理。此外,还提及了Parallel.For的使用,以及Parallel.ForEach与Parallel.For的区别,强调在并行编程中选择合适的方法的重要性。
摘要由CSDN通过智能技术生成

说到.net中的并行编程,也许你的第一反应就是Task,确实Task是一个非常灵活的用于并行编程的一个专用类,不可否认越灵活的东西用起来就越

复杂,高度封装的东西用起来很简单,但是缺失了灵活性,这篇我们就看看这些好用但灵活性不高的几个并行方法。

一:Invoke

现在电子商务的网站都少不了订单的流程,没有订单的话网站也就没有存活的价值了,往往在订单提交成功后,通常会有这两个操作,第一个:发起

信用卡扣款,第二个:发送emial确认单,这两个操作我们就可以在下单接口调用成功后,因为两个方法是互不干扰的,所以就可以用invoke来玩玩了。

1 static void Main(string[] args)2 {3 Parallel.Invoke(Credit, Email);4

5 Console.Read();6 }7

8 static voidCredit()9 {10 Console.WriteLine("****************** 发起信用卡扣款中 ******************");11

12 Thread.Sleep(2000);13

14 Console.WriteLine("扣款成功!");15 }16

17 static voidEmail()18 {19 Console.WriteLine("****************** 发送邮件确认单!*****************");20

21 Thread.Sleep(3000);22

23 Console.WriteLine("email发送成功!");24 }

8aec4ce46f44e88966435a9c800a711b.png

怎么样,实现起来是不是很简单,只要把你需要的方法塞给invoke就行了,不过在这个方法里面有一个重载参数需要注意下,

1 public static void Invoke(ParallelOptions parallelOptions, params Action[] actions);

有时候我们的线程可能会跑遍所有的内核,为了提高其他应用程序的稳定性,就要限制参与的内核,正好ParallelOptions提供了

MaxDegreeOfParallelism属性。

3bfc21a00ac6203ef28f51f40899a266.png

好了,下面我们大概翻翻invoke里面的代码实现,发现有几个好玩的地方:

<1>: 当invoke中的方法超过10个话,我们发现它走了一个internal可见的ParallelForReplicatingTask的FCL内部专用类,而这个类是继承自

Task的,当方法少于10个的话,才会走常规的Task.

<2> 居然发现了一个装exception 的ConcurrentQueue队列集合,多个异常入队后,再包装成AggregateException抛出来。

比如:throw new AggregateException(exceptionQ);

<3> 我们发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值