gpt4 book ai didi

c# - async/await 对 IO 操作做了什么?

转载 作者:太空宇宙 更新时间:2023-11-03 22:50:32 24 4
gpt4 key购买 nike

假设样本片段:

public async void writeDataOnFile (byte[] data, string filePath) {
using(var fs = new FileStream(filePath)) {
await File.WriteAsync(data,0,data.length);
}
}

我知道线程池没有消耗后台线程,但是会启动一个IO操作,最后会通知线程。

问题是:async/await 如何理解 WriteAsync 是一种 IO 绑定(bind)方法而不是 CPU 绑定(bind)方法?

如有任何帮助,我们将不胜感激。

最佳答案

Question is: HOW async/await understands that WriteAsync is an IO method rather than a CPU method?

await 关键字不关心它是 IO 还是 CPU 绑定(bind)。它只关心“调用”是可等待的。请看here了解更多详情。

请参阅下面的示例,其中扩展方法返回一个 TaskAwaiter:

public static class ThisWorks
{
public static System.Runtime.CompilerServices.TaskAwaiter GetAwaiter(this Int32 millisecondsDue)
{
return TimeSpan.FromMilliseconds(millisecondsDue).GetAwaiter();
}

private static System.Runtime.CompilerServices.TaskAwaiter GetAwaiter(this TimeSpan timeSpan)
{
return Task.Delay(timeSpan).GetAwaiter();
}
}

现在我们可以这样做:

await 15;

还有更好的例子,但至少这说明了这一点。

关于c# - async/await 对 IO 操作做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47563304/

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