除了 Flush()方法,我注意到 Stream类也有一个 FlushAsync()方法。在什么情况下你会使用 FlushAsync()方法?刷新缓冲区是否如此昂贵以保证异步运行它?
最佳答案
是的,它可能非常昂贵,因为它可能实际上会将数据写入底层媒体。
这些条件中的任何一个都可能为真:
- 您有很多数据要写入(根据缓冲区大小)。
- 媒体本身可能非常慢(网络或接口(interface)速度较慢的设备)。
- 中间可能有抽象层,它们将在有效写入之前进行进一步处理(例如压缩/加密抽象)。
它可能与任何其他写入操作一样昂贵 然后是Async
版本(此外,它有助于 API 一致性)。
FlushAsync()
是如何实现的……一个实现细节,它可能是线程池中的一个简单的Task
或更复杂的东西(异步 I/O 可能涉及操作系统本身)。它甚至可能是同步的(想象一下刷新 MemoryStream
,它没有任何缓冲区)。
关于c# - Stream Flush 与 FlushAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23337176/