c# - 为什么我们必须等待 C# 中的异步方法调用

标签 c# asynchronous async-await

在C#中,当我们调用一个async方法时,需要在方法内部等待它,否则编译器会给出一个警告信息说该方法将在没有“await”的情况下被调用为sync。 我知道这在以下情况下很有用:

var task = DoSomethingLongAsync();
DoSomethingElse();
await task;

那是因为当我们调用异步方法时,我们可以做其他事情,然后等待异步结果。

但在其他一些情况下,我们不需要等待异步结果,比如类似于web服务器的场景:

listen();
while (true)
{
    var request = Accept();
    await ProcessRequestAsync(request);
}

显然,对于上述场景,我们希望请求能够并行处理。 但是如果我们在那里使用等待(作为当前),请求将被一个一个地处理,而不是我们预期的那样。

那么在类似的场景下我们应该如何调用异步方法呢?

最佳答案

必须使用await - 这是一个警告,而不是错误。
编译器向您发出此警告是因为 async 方法的通常用例是异步运行它们,为此,您可以使用 await 关键字。

基本上,这个警告是编译器提醒您确保这不会被忽视的方式 - 但它不会阻止您在没有 await 的情况下使用 async 方法 关键字 - 您的代码将编译并运行。

关于c# - 为什么我们必须等待 C# 中的异步方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58855897/

相关文章:

c# - 将 zip 条目提取到另一个 Zip 文件

c# - 根据类型参数实例化新对象

c# - 如何将字符串转换为运行时确定的可空类型?

Python:如何使用 asyncio 和巨大的 csv 文件从循环发送异步请求?

mysql - node.js - 代码执行路径的精度

javascript - 是否可以在其他 then for() 循环中使用 await ?

c# - Listview滚动触发Combobox SelectedValue并抛出异常

javascript - Firebase Cloud Functions – JavaScript/Typescript Promisereject() 问题

javascript - 等待所有不同的 promise 完成 nodejs(异步等待)

c# - 异步打开读取