TPL DataFlow无法处理ActionBlock中的异常

时间:2017-09-06 22:28:17

标签: c# task-parallel-library tpl-dataflow

我尝试将@RequestMapping(value="/createP", method=RequestMethod.POST) public String addPerson(Person person, Model model) { personService.addPerson(person); return "redirect:/listP"; } @RequestMapping(value="/listP", method=RequestMethod.GET) public String listPerson(Model model) { model.addAttribute("persons", personService.getAllPersons()); return "ajaxExmpl"; } 的一封邮件副本发送给多个也是ActionBlock<int>的消费者。这很好用,但是如果其中一个目标块抛出异常,它似乎不会传播到源块。这是我如何尝试处理异常,但它永远不会进入ActionBlock<int>部分:

catch

我不确定我在这里缺少什么,但我希望能够检索异常以及哪个目标块出现故障。

1 个答案:

答案 0 :(得分:1)

如果一个区块进入故障状态,它将不再接受新项目,并且它投掷的Exception将附加到其Completion任务和/或如果在管道中链接则传播完成。如果块拒绝更多项目,请观察Exception您可以await完成。

var processingTasks = targets.Select(async t =>
{
    try
    {
        if(!await t.SendAsync(item))
            await t.Completion;
    }
    catch
    {
        Trace.TraceInformation("handled in select"); // never goes here
    }
});