除Flush()方法外,我注意到Stream类也有FlushAsync()方法。在什么情况下你会使用FlushAsync()方法?刷新缓冲区是否太昂贵以至于需要异步运行它?
答案 0 :(得分:3)
是的,它可能非常昂贵,因为可能实际上将数据写入底层媒体。
任何这些条件都可能属实:
它可以像其他任何写作操作一样昂贵,然后有Async
版本(此外它还有助于API一致性)。
如何实现FlushAsync()
是一个实现细节,它可能是线程池中的简单Task
或更复杂的东西(异步I / O可能涉及操作系统本身)。它甚至可能是同步的(想象一下,刷新MemoryStream
,它没有任何缓冲区。)
答案 1 :(得分:0)
从我收集的内容中,调用stream.Write()
可能会也可能不会将数据放入中间内存缓冲区,然后再卸载到目标目标。发生这种情况时,stream.Write()
会在实际写入所有数据之前解锁。
stream.Flush()
的作用是阻止程序直到中间缓冲区清除。根据传输速度和数据大小,您可能希望Flush()
异步。