我正在尝试将我的 HTTP 响应实现为完全异步(使用 async/await)。
这是一个很好的简化,但让我们假设我需要进行多个小写操作:
for (int i=0; i<1000; i++) WriteToResponse(words[i]);
例如,一个用例是将对象手动编码为 JSON 或 XML,并在对象遍历期间遇到每个对象时将其写入响应。
我目前的实现是:
async Task Respond(HttpResponse res)
{
for (int i=0; i<1000; i++) await res.Output.WriteAsync(words[i]);
}
这是正确的方法吗?
我有点担心所有的异步都会在这里增加很多开销。如果我在后台为我要写的每个单词安排回调,也许我应该继续同步写整个事情?
当我们回到同步时代时,我了解缓冲是如何工作的。我写了我的输出流,它实际上是在幕后缓冲的。当缓冲区足够满时,它被刷新并实际同步写入套接字。但是当我异步工作时这是如何工作的?还缓冲吗?还是我真的在等待每一个小写的完成,然后再写下一个?