C# 等待似乎不是等待
我有: 我始终得到以下输出:C# 等待似乎不是等待,c#,.net,async-await,C#,.net,Async Await,我有: 我始终得到以下输出: async void getData() { Console.WriteLine("Start"); HttpClient api = new HttpClient(); await api.PostAsync("http://....", someContent).ContinueWith( .... ); Console.WriteLine("End"); } void main() { Ta
async void getData()
{
Console.WriteLine("Start");
HttpClient api = new HttpClient();
await api.PostAsync("http://....", someContent).ContinueWith(
....
);
Console.WriteLine("End");
}
void main()
{
Task task = new Task(getData);
task.Start();
task.Wait();
Console.WriteLine("Returned");
}
控件返回到调用方法后,getData方法的结尾怎么可能被执行?更改
Start
Returned
End
到
您应该使用async void
的唯一位置是WPF应用程序中的按钮单击之类的事件处理程序。不使用它的原因是因为你需要返回一些可以等待的东西,而返回void有效地否定了这一点
此外,不需要创建新任务。您可以将其重写如下:
async Task getData()
改变
Start
Returned
End
到
您应该使用async void
的唯一位置是WPF应用程序中的按钮单击之类的事件处理程序。不使用它的原因是因为你需要返回一些可以等待的东西,而返回void有效地否定了这一点
此外,不需要创建新任务。您可以将其重写如下:
async Task getData()
可能想解释一下
async void
在这里做的事情仍然无法正常工作,因为他正在执行新任务(getData)
他需要调用.Unwrap().Wait()
或使用Task.run不要使用async void。努夫说。除非事件..@ScottChamberlain-我仍然在编辑/添加我的答案:)(在你的评论出现时键入),我省略了Unwrap()
,但现在添加了它。谢谢。您唯一应该使用async void的地方是WPF/WinForm事件处理程序。ASP.NET事件处理程序呢?他们不合格吗?可能想解释一下async void
在这里做的事情仍然不能正常工作,因为他正在执行新任务(getData)
他需要调用.Unwrap().Wait()
或使用Task.run不要使用async void。努夫说。除非事件..@ScottChamberlain-我仍然在编辑/添加我的答案:)(在你的评论出现时键入),我省略了Unwrap()
,但现在添加了它。谢谢。您唯一应该使用async void的地方是WPF/WinForm事件处理程序。ASP.NET事件处理程序呢?他们不合格吗?