我们如何知道IO是阻塞还是非阻塞?

6

阅读C#文档时,我想知道如何判断IO是否是阻塞的。例如,BinaryWriter.Write方法,我在文档中找不到任何关于该方法是否是阻塞的信息。


1
我认为一个安全的经验法则是假设方法是同步的,除非文档明确说明它们是异步的。框架使用的另一种模式是在异步方法后缀中添加“Async”,或提供BeginXXX/EndXXX方法对。 - Daniel Kelley
2个回答

7
BinaryWriter.Write 方法在完成工作之前不会返回结果,因此是阻塞的。等待时间可能没有上限。
异步方法通常易于识别,因为它们返回 TaskIAsyncResult(这对应于旧的 APM 模式)。它们也以合适的名称命名(例如 BeginXxxXxxAsync)。当这样的方法返回时,您还没有得到结果。这表明计算仍未完成。
文档将此属性用于异步方法。由于几乎所有方法都是阻塞和同步的(例如所有字符串方法),因此文档中未注意到此行为。这是默认值。

1

由于它没有提供BeginWrite及其对应的EndWrite方法,所以它必须是阻塞的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接