c# - 此异步方法缺少 'await' 运算符,将同步运行

标签 c# asynchronous async-await

我的程序有 3 个以下语句的警告:

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.

试图告诉我的警告是什么?我应该怎么办?

这是我的代码:它是否使用多线程运行?

static void Main(string[] args)
{
    Task task1 = new Task(Work1);
    Task task2 = new Task(Work2);
    Task task3 = new Task(Work3);

    task1.Start();
    task2.Start();
    task3.Start();

    Console.ReadKey();
}

static async void Work1()
{
    Console.WriteLine("10 started");
    Thread.Sleep(10000);
    Console.WriteLine("10 completed");
}

static async void Work2()
{
    Console.WriteLine("3 started");
    Thread.Sleep(3000);
    Console.WriteLine("3 completed");
}

static async void Work3()
{
    Console.WriteLine("5 started");
    Thread.Sleep(5000);
    Console.WriteLine("5 completed");
}

最佳答案

async 关键字本身并没有太大作用。从您的代码中删除它,您的代码将执行完全相同的操作。

async 是做什么的?

  • 它改变了方法内部的有效内容,特别是它允许您使用 await 关键字
  • 反过来,这意味着方法的主体将根据方法主体中存在的 await 进行转换。
  • 如果该方法返回一个值,该方法也会转换为将返回值包装在一个Task中。

但是,如果您 a) 在您的方法主体中没有任何 await 并且 b) void 返回,则不会实现任何特殊的效果。编译器警告确实试图弄清楚这一点——没有任何 awaitasync 方法只是简单的没有意义。 await 是此功能中更重要的部分。

关于c# - 此异步方法缺少 'await' 运算符,将同步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41157449/

相关文章:

c# - 自动发现本地异常 : The Autodiscover service couldn't be located

c# - 通过 CaSTLe Windsor 中的属性注入(inject)进行循环依赖

javascript - Node.js:识别脚本是异步的还是非阻塞的

c# - 取消异步套接字操作

c# - 异步方法阻塞未等待的任务

c# - 来自数据库表的 ASP.NET Core 2 授权

c# - 同时用户在数据绑定(bind) DataGridView 中进行更改时出现问题

AngularJS。在服务中解决 promise 后如何更新指令?

c# - 将 IEnumerable.Aggregate 与异步调用结合使用

c# - 如果我不等待异步任务,您能解释一下为什么没有捕获到异常吗?