假设样本片段:
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绑定方法而不是CPU绑定方法?
任何帮助都将不胜感激。
答案 0 :(得分:3)
问题是:async / await如何理解WriteAsync是一种IO方法而不是CPU方法?
await
关键字不关心它是IO还是CPU绑定的。所有它关心的是"呼叫"是等待的。有关详细信息,请参阅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;
有更好的例子,但至少这表明了这一点。