异步和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.BeginWrite
、Stream.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);