C#Winform:使用异步等待的长时间运行操作

C#Winform:使用异步等待的长时间运行操作,c#,winforms,asynchronous,C#,Winforms,Asynchronous,我的代码已正确编译,但正在调用警告 此异步方法缺少“await”运算符,将同步运行。 考虑使用“Acess”操作符等待非阻塞API调用, 或“wait Task.Run(…)”在后台线程上执行CPU限制的工作 那么,请告诉我,我的代码中有哪些不足之处,我会得到警告? 如何解决这个问题。谢谢警告说您正在异步调用longRunningRoutine,但此方法没有任何类型的异步请求。 要解决此警告,您需要同步调用此方法,或者需要使用异步调用睡眠。如果您没有等待的方法(您没有),则必须创建一个任务来运行

我的代码已正确编译,但正在调用警告

此异步方法缺少“await”运算符,将同步运行。 考虑使用“Acess”操作符等待非阻塞API调用, 或“wait Task.Run(…)”在后台线程上执行CPU限制的工作

那么,请告诉我,我的代码中有哪些不足之处,我会得到警告?
如何解决这个问题。谢谢

警告说您正在异步调用
longRunningRoutine
,但此方法没有任何类型的异步请求。

要解决此警告,您需要同步调用此方法,或者需要使用

异步调用睡眠。如果您没有等待的方法(您没有),则必须创建一个
任务来运行它,并等待该任务:

private async void Form1_Load(object sender, EventArgs e)
{
     await Task.Run(() => longRunningRoutine())
}

public void longRunningRoutine()
{
    System.Threading.Thread.Sleep(10000);
}

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

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

然后按照惯例建议通过添加
.Async
后缀来重命名方法-这将在您阅读代码时节省几秒钟的时间。

longRunningRoutine()
实际做什么?将睡眠替换为
等待任务。延迟(10000)您的异步方法(longRunningRoutine)缺少等待运算符,将同步运行…我更新了代码,现在一切正常。谢谢你真正的代码真的有任务吗?如果没有,那么当您尝试将此代码转换为其他代码时(这是不可等待的),您将遇到相同的问题。。。但是你已经通过使用
wait Task.Run()
解决了这个问题。我想OP实际上对调用
Sleep()
不感兴趣-他只是用它来模拟一个需要一些时间的同步操作。我同意你的观点(因此我对你的答案投了赞成票)但既然他问他为什么会犯这个错误,我就写了一个解释和两个可能的解决方法(第三个已经由你发布了)。
private async void Form1_Load(object sender, EventArgs e)
{
   await longRunningRoutine();
   label1.Text = "hello test";
}