【问题标题】:How to use TPL's ActionBlock to write to a file?如何使用 TPL 的 ActionBlock 写入文件?
【发布时间】:2015-06-15 12:33:21
【问题描述】:

我正在 .Net TPL 中构建一个管道,该管道经过一系列数据转换步骤,最终需要将输出写入文件。我正在考虑使用 ActionBlock 写入文件。但是,我不确定这是否会遇到任何问题......例如多个线程试图写入同一个文件。

我需要担心写争用吗?我想知道将 ExecutionDataflowBlockOptions.MaxDegreeOfParallelism 设置为高于 1 的值是否是个好主意。这会导致任何问题吗?

有更好的选择吗?

【问题讨论】:

  • 您要写入哪个硬件?
  • 写入普通硬盘。
  • 然后并行化你的写入不会提高性能..

标签: c# .net io parallel-processing task-parallel-library


【解决方案1】:

我想知道将 ExecutionDataflowBlockOptions.MaxDegreeOfParallelism 设置为大于 1 的值是否是个好主意。这会导致任何问题吗?

是的,当然可以,这取决于您具体做什么。 .Net 中的大多数类型都不是线程安全的,这意味着您不能同时使用来自多个线程的同一个对象。其中包括 System.IO 对象,例如 FileStream

另一方面,如果您将 MaxDegreeOfParallelism 设置为 1,则应该没有任何问题。

【讨论】:

  • 您的回答是否意味着您认为 TPL 数据流是完成这项任务的一个不错的选择,还是有更好的选择?你能告诉我怎么做吗?
  • @Littlegeek 问题中的任务是:将 TPL 数据流管道的结果写入文件。 ActionBlock<T> 是一个不错的解决方案。如果您的要求不同,解决方案也可能不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 2016-05-03
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多