trn*_*son 5 .net c# io asynchronous async-await
async-await
也许是试图在C#中理解,并且有点陷入"鸡和蛋"的问题.
一个async
方法是否需要调用另一个方法才能async
使它异步?
作为一个高级示例,我正在尝试对文件系统进行简单的写入,但不确定如何使这个任务等待,如果有的话.
public Task<FileActionStatus> SaveAsync(path, data)
{
// Do some stuff, then...
File.WriteAllBytes(path, data); // <-- Allow this to yield control?
// ... then return result
}
Run Code Online (Sandbox Code Playgroud)
在我试图异步的方法中调用那行代码.因此,在编写文件时,我想对应用程序进行控制,但不太确定如何执行此操作.
有人可以用一个非常高级的例子来启发我,我将如何以某种async
方式将文件写入文件系统?
异步方法是否需要调用另一个async以使其异步?
通常就是这种情况,因为async一直到调用堆栈的底部,并在实际进行IO操作的最低位置结束.在您的情况下,您正在使用File.WriteAllBytes
哪个是阻塞同步调用.你不能神奇地让它异步.
有人可以通过一个非常高级的例子来启发我,我将如何以异步方式将文件写入文件系统?
为此,您需要使用一种公开异步API的机制,例如FileStream
:
public async Task<FileActionStatus> SaveAsync(string path, byte[] data)
{
using (FileStream sourceStream = new FileStream(path,
FileMode.Append, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(data, 0, data.Length);
}
// return some result.
}
Run Code Online (Sandbox Code Playgroud)