我的程序有以下声明的3个警告:
这种异步方法缺少'await'运算符并将同步运行。 考虑使用'await'运算符来等待非阻塞API调用, 或'等待Task.Run(...)'在后台线程上进行CPU绑定工作。
告诉我什么警告?我该怎么办?
这是我的代码:它是否正在使用多线程运行?
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");
}
答案 0 :(得分:4)
async
关键字本身并没有真正起作用。从代码中删除它,您的代码将完全相同。
async
做了什么?
await
关键字await
来转换方法的主体。Task
中。但是,如果你a)你的方法体中没有任何await
并且b)void
返回,那么就没有什么特别的了。编译器警告确实试图明确这一点 - 没有任何async
的{{1}}方法只是简单的没有意义。 await
是此功能中更重要的部分。
答案 1 :(得分:2)
如果您要使用同步方法覆盖和异步方法,则可以:
等待Task.Run(()=> [您的同步方法]);
答案 2 :(得分:1)
是的,您的代码可能会使用多线程。但是,如果您刚删除了async
关键字,它仍会这样做。由于你没有解释它为什么存在,我建议删除它。
如果你想要一个异步/等待模式,你可以使用Task.Delay()
但我建议你在使用它之前阅读更多有关async / await的内容:
static async void Work3()
{
Console.WriteLine("5 started");
await Task.Delay(5000);
Console.WriteLine("5 completed");
}
答案 3 :(得分:1)
您使用了'async
'关键字和方法,表示Work1(),Work2()和Work3()方法是异步执行的,但您没有使用'await'关键字。因此它同步执行。如果要异步执行,请使用“await
”关键字。
static async void Work1()
{
Console.WriteLine("10 started");
await Task.Delay(10000);
Console.WriteLine("10 completed");
}
static async void Work2()
{
Console.WriteLine("3 started");
await Task.Delay(3000);
Console.WriteLine("3 completed");
}
static async void Work3()
{
Console.WriteLine("5 started");
await Task.Delay(5000);
Console.WriteLine("5 completed");
}
答案 4 :(得分:0)
您使用关键字async
指定了方法(Work1,Work2,Work3),但这些方法中的任何代码都不使用await
运算符来调用异步调用。