Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 等待似乎不是等待_C#_.net_Async Await - Fatal编程技术网

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事件处理程序呢?他们不合格吗?