Stream Flush vs FlushAsync

时间:2014-04-28 09:20:04

标签: c# asynchronous

Flush()方法外,我注意到Stream类也有FlushAsync()方法。在什么情况下你会使用FlushAsync()方法?刷新缓冲区是否太昂贵以至于需要异步运行它?

2 个答案:

答案 0 :(得分:3)

是的,它可能非常昂贵,因为可能实际上将数据写入底层媒体。

任何这些条件都可能属实:

  • 您需要编写大量数据(根据缓冲区大小)。
  • 媒体本身可能非常慢(网络或接口速度慢的设备)。
  • 中间可能会有多层抽象,在有效编写之前会进行进一步处理(例如压缩/加密抽象)。

它可以像其他任何写作操作一样昂贵,然后有Async版本(此外它还有助于API一致性)。

如何实现FlushAsync()是一个实现细节,它可能是线程池中的简单Task或更复杂的东西(异步I / O可能涉及操作系统本身)。它甚至可能是同步的(想象一下,刷新MemoryStream,它没有任何缓冲区。)

答案 1 :(得分:0)

从我收集的内容中,调用stream.Write()可能会也可能不会将数据放入中间内存缓冲区,然后再卸载到目标目标。发生这种情况时,stream.Write()会在实际写入所有数据之前解锁。

stream.Flush()的作用是阻止程序直到中间缓冲区清除。根据传输速度和数据大小,您可能希望Flush()异步。