不应发生有关异步的编译器警告

Oli*_*non 1 c# compiler-warnings async-await .net-core

所以下面的代码会触发编译器警告:

"没有 await 运算符的异步函数将同步运行"

    public async Task UpsertMariaDb()
    {
        IEnumerable<Task> insertTasks = InsertSomethingDb();
        IEnumerable<Task> updateTasks = UpdateSomethingDb();

        Task.WaitAll(insertTasks.ToArray());
        Task.WaitAll(updateTasks.ToArray());
    }
Run Code Online (Sandbox Code Playgroud)

我的问题如下,是否有一些非常基本的关于 async/await 的内容我不了解,或者这只是一个编译器警告错误,因为我没有放置明确的“ await

Com*_*eak 9

Task.WaitAll 阻塞当前线程,所以警告是正确的 - 您尝试实现一个异步方法,但它不是异步的,因为没有等待任何东西。

你可能打算这样做:

public async Task UpsertMariaDb()
{
    IEnumerable<Task> insertTasks = InsertSomethingDb();
    IEnumerable<Task> updateTasks = UpdateSomethingDb();

    await Task.WhenAll(insertTasks);
    await Task.WhenAll(updateTasks);
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您将我的评论变成实际的答案。:) (3认同)
  • 抱歉,当我已经开始输入答案时,您的评论就出现了,所以我想我应该继续;) (3认同)
  • 您可以删除`.ToArray()`,它是多余的。`Task.WhenAll` 有一个接受 `IEnumerable&lt;Task&gt;` 的重载。 (2认同)