【发布时间】:2014-03-26 02:27:06
【问题描述】:
我正在创建一个类流,它继承自 Stream。当我使用StreamWriter 类异步写入信息时:
using (var sw = new StreamWriter(messageWriter, Encoding.UTF8))
await sw.WriteAsync(msg);
我可以看到StreamWriter 如何直接转到void Stream.Write(byte[] buffer, int offset, int count) 而不是Task Stream.WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)。
这是一个错误还是我遗漏了什么?
【问题讨论】:
-
有人对正在发生的事情感到非常困惑。只要你一直在谈论 StreamReader 写文本,那某人就是你。
-
嗯,这不仅仅是一个错字。它也出现在您的问题标题和您使用的 [标签] 中。最重要的是,你没有说过:你怎么知道这个?你在看什么?如果它是某种反汇编程序然后扔掉它,它不会给你很好的信息。
-
我也解决了这个问题,谢谢。嗯,这和帖子所说的差不多,我可以在我的流派生类中看到
Write被调用而不是WriteAsync,这就是我当时所知道的。现在在下面的回答中,我已经解释了为什么会发生。 -
这是async streams 中提议的
IAsyncDisposable的用例,它是C# 8.0 的候选功能,并结合了该提议未涵盖的using语句增强功能。 C# 7.x 及更低版本没有“不错”的异步处理方式,因此来自using语句的隐式Dispose()调用会同步执行刷新。解决方法是直接调用并等待FlushAsync(),以便同步的Dispose()不必同步刷新。 -
在 .Net Core 上,您必须调用 DisposeAsync() 而不是 Dispose() 以避免同步刷新。
标签: async-await streamwriter .net