gpt4 book ai didi

c# - 了解异步 - 我可以等待同步方法吗?

转载 作者:太空狗 更新时间:2023-10-29 23:06:26 26 4
gpt4 key购买 nike

试图理解 C# 中的 async-await,也许有点陷入“先有鸡还是先有蛋”的问题。

async 方法是否需要调用另一个 async 才能使其异步?

作为一个高级示例,我正在尝试对文件系统执行简单的写入操作,但不确定如何让此任务可等待(如果有的话)。

public Task<FileActionStatus> SaveAsync(path, data)
{
// Do some stuff, then...

File.WriteAllBytes(path, data); // <-- Allow this to yield control?

// ... then return result
}

在我试图使其异步的方法中调用该行代码。因此,在写入文件时,我想将控制权交给应用程序,但不太确定该怎么做。

有人可以通过一个非常高级的示例启发我如何以 async 方式将文件写入文件系统吗?

最佳答案

Does an async method need to call another async for it to be asynchronous?

通常情况就是这样,因为异步会一直走到调用堆栈的底部,并在实际进行 IO 操作的最低位置结束。在您的例子中,您使用的是File.WriteAllBytes,这是一个阻塞同步调用。您不能神奇地使其异步。

Can someone enlighten me with a very high-level example of how I could write a file to the file system in an async way?

为此,您需要使用一种公开异步 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.
}

关于c# - 了解异步 - 我可以等待同步方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33844143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com