我正在使用TPL数据流技术处理Azure worker角色中的队列项。我应该拥有一个单独的长时间运行的数据流,还是为每个接收到的消息生成新的数据流?
如果块中发生错误,该块将停止接受新消息。这意味着如果块中出现异常,则整个数据流将停止处理。
我需要能够承受来自无效队列输入等异常而不锁定我的数据流。我看到有两个选择:
- 启动单个数据流并在每个消息从队列中出来时发送消息到它。每个块的内容都包裹在try-catch块中,记录异常并继续处理。这似乎很笨拙,我认为有更好的方法。
- 对于每个消息,我启动一个新的数据流并处理队列消息。如果任何块中抛出异常,数据流将完成,并且我只恢复单个消息。我看到的大多数Dataflow示例都会发送多个消息,因此这也不太对。
我已经看到了许多关于如何在异常后完成数据流的文档,但关于如何从异常中恢复的文档却很少。
Try
库。它允许通过管道的所有块传递消息,然后在最后观察到发生的任何异常。这里是对该库的一个小扩展,它允许同时传递原始消息和最终结果/异常。 - Theodor Zoulias