首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CCR:使用因果关系处理错误的最佳实践

CCR:使用因果关系处理错误的最佳实践
EN

Stack Overflow用户
提问于 2009-07-29 11:28:56
回答 1查看 516关注 0票数 7

由于具有复杂的任务序列,实现错误处理会在对每个小任务使用try/catch块和类似于PortSet<ActualResult, Exception>上的选择接收器之类的东西时迅速膨胀代码。

谢天谢地,CCR似乎为任务图提供了一种更通用的处理异常的机制:因果关系。一个典型的例子如下:

代码语言:javascript
复制
Port<Exception> exceptionPort = new Port<Exception>();
Dispatcher.AddCausality(new Causality("some job", exceptionPort));
Arbiter.Activate(
  dispatcherQueue,
  Arbiter.Receive(false, exceptionPort, ex => Console.WriteLine(ex)));
// now schedule the real tasks

在我的例子中,我有一个计算密集型的应用程序,使用CCR来实现一个分散/聚集的场景,将“作业”分割成一组并行任务。(除此之外,其中一个作业可以同时运行。)如果一个任务失败,我希望停止作业中的所有剩余任务,但不停止任何其他任务。(如果我错过了拼图的一部分,结果对我没有任何帮助,所以继续做下去只是浪费CPU的时间。)

问题是,最好的方法是执行停止。

一个想法是:

lifetime.

  • Create
  1. 创建一个Dispatcher实例,并在应用程序
  2. 上为每个“作业”(一组任务)保留一个新的DispatcherQueue。在创建DispatcherQueue.
  3. In之后立即添加Causality --异常队列的处理程序,在DispatcherQueue.
  4. Before上调用Suspend(),处理dispatcher队列,删除因果关系。

我想知道这一建议是否可以被视为最佳做法,或者是否有更好的办法来处理这种情况-可能相当普遍-。

EN

回答 1

Stack Overflow用户

发布于 2010-07-27 04:28:36

对我来说这似乎是个好办法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1199568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档