C#Winform:异步的长时间运行等待

时间:2017-02-20 11:06:18

标签: c# winforms asynchronous

我的代码编译正确,但收到警告

  

这种异步方法缺乏等待'运营商并将同步运行。   考虑使用' 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);
    }

请告诉我我的代码缺少什么,我收到警告? 如何解决这个问题。感谢

3 个答案:

答案 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

异步调用Sleep

答案 2 :(得分:1)

您的longRunningRoutine方法已经异步 - 因此您可以删除只会浪费额外线程的Task.Run

private async void Form1_Load(object sender, EventArgs e)
{
   await longRunningRoutine();
   label1.Text = "hello test";
}

然后遵循惯例建议通过添加..Async后缀来重命名方法 - 当您阅读代码时,它将节省几秒钟的时间。