我的代码编译正确,但收到警告
这种异步方法缺乏等待'运营商并将同步运行。 考虑使用' await'运算符等待非阻塞API调用, 或者等待Task.Run(...)'在后台线程上进行CPU绑定工作。
private async void Form1_Load(object sender, EventArgs e)
{
//await longRunningRoutine();
await Task.Run(async () =>
{
await longRunningRoutine(); ;
});
label1.Text = "hello test";
}
public async Task longRunningRoutine()
{
await Task.Delay(10000);
}
请告诉我我的代码缺少什么,我收到警告? 如何解决这个问题。感谢
答案 0 :(得分:2)
如果你没有等待的等待方法(你不会这样做),你必须创建一个Task
来运行它,并等待该任务:
private async void Form1_Load(object sender, EventArgs e)
{
await Task.Run(() => longRunningRoutine())
}
public void longRunningRoutine()
{
System.Threading.Thread.Sleep(10000);
}
答案 1 :(得分:1)
警告表示您正在异步调用longRunningRoutine
,但此方法没有任何类型的异步请求。
要解决此警告,您需要同步调用此方法,或者需要使用Task.Delay
答案 2 :(得分:1)
您的longRunningRoutine
方法已经异步 - 因此您可以删除只会浪费额外线程的Task.Run
private async void Form1_Load(object sender, EventArgs e)
{
await longRunningRoutine();
label1.Text = "hello test";
}
然后遵循惯例建议通过添加..Async
后缀来重命名方法 - 当您阅读代码时,它将节省几秒钟的时间。