多个短期TPL数据流与单个长期运行数据流的对比

本文关键字:数据流 运行 单个长 TPL | 更新日期: 2023-09-27 18:05:53

我正在使用TPL数据流来处理Azure worker角色中队列中的项目。我应该有一个长时间运行的数据流,还是为我收到的每条消息生成一个新的数据流?

如果在块中抛出错误,该块将停止接受新消息。这意味着如果在一个块中有一个异常,整个数据流将停止处理。

我需要能够承受诸如无效队列输入的异常而不锁定我的数据流。我看到两个选项之一:

  1. 我有一个启动单一的数据流,并发送消息给它,因为他们离开队列。每个块的内容都包装在一个记录异常的try-catch块中,然后继续处理。这看起来很笨拙,我想有更好的方法。
  2. 对于每个消息,我启动一个新的数据流并处理队列消息。如果在任何块中抛出异常,则数据流将完成,并且我只恢复一条消息。我见过的大多数数据流示例发送多个消息,所以这感觉也不对。

我看过很多关于如何在异常后完成数据流的文档,但是很少有关于如何从异常中恢复的文档。

多个短期TPL数据流与单个长期运行数据流的对比

你绝对应该选择第一个选项,只有一个流程。

在第二个选项中,使用数据流比一个接一个地调用几个方法没有任何附加价值。为每个项目创建完整的数据流也有开销。

最好只构建一次流程,然后在应用的整个生命周期中使用它。我不认为处理每个块的异常有什么错,但如果你想让整个流程失败,然后再创建一个新的。