rea*_*idt 7 error-handling concurrency ccr
具有复杂的任务序列,实现错误处理可以在使用try/catch块和诸如Choice接收器之类的东西时PortSet<ActualResult, Exception>
为每个小任务快速膨胀代码.
值得庆幸的是,CCR似乎提供了一种机制来以更通用的方式处理异常,用于任务图:因果关系.典型示例如下所示:
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
Run Code Online (Sandbox Code Playgroud)
就我而言,我有一个使用CCR的计算密集型应用程序来实现分散/聚集场景,将"作业"分成一堆并行任务.(除此之外,这些作业中的多一个可以同时运行.)如果一个任务失败,我想要停止作业中的所有剩余任务,但不能停止任何其他任务.(如果我错过了一块拼图,结果对我没用,所以继续研究这个只会浪费CPU时间.)
问题是实施停止的最佳方法是什么.
一个想法是:
Dispatcher
实例并将其保持在应用程序生命周期DispatcherQueue
为每个"工作"(一组任务)创建一个新的.Causality
创建后立即添加DispatcherQueue
.Suspend()
上DispatcherQueue
.我想知道这个建议是否可以被视为最佳实践,或者是否有更好的方法来处理这种 - 可能是相当常见的 - 情景.
归档时间: |
|
查看次数: |
483 次 |
最近记录: |