有没有办法用旧的.net框架版本异步写入FileStream?



异步和await运算符是在C# 5和.NET Framework 4.5中引入的。

我的问题是,为了使用异步,我需要.NET Framework 4.5或更高版本,但我希望能够在以前的.NET Framework版本上做同样的事情(异步写入FileStream(。

目前我有一个带有事件处理程序的静态观察器类。此事件处理程序绑定到每次创建特定类时调用的事件。此事件将调用以下函数:

static async void FileWriter(string path, string fileName, byte[] text)
{
byte[] encodedText = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(437), text);
using (FileStream sourceStream = new FileStream(Path.Combine(path, fileName),
FileMode.Append, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};
}

是否有任何替代方法可以使其与较旧的.NET Framework版本一起使用?

.NET Framework 支持异步 I/O 的时间比 C# 具有async/await关键字的时间要长得多。您可以使用 APM 方法:Stream.BeginWriteStream.BeginRead等。

不过,这些使用起来不是很友好。与您的示例等效为:

byte[] encodedText = ...;
FileStream sourceStream = ...;
sourceStream.BeginWrite(encodedText, 0, encodedText.Length, res =>
{
try
{
// result of Write op materializes here -- exception etc.
sourceStream.EndWrite(res);
}
finally
{
sourceStream.Dispose();
}
}, state: null);

最新更新