Task.Wait()没有等待任务完成

时间:2016-07-07 09:25:08

标签: c# async-await

我有一个控制台应用程序,我想一个接一个地启动任务。

这是我的代码:

static void Main()
{
    string keywords = "Driving Schools,wedding services";
    List<string> kwl = keywords.Split(',').ToList();

    foreach(var kw in kwl)
    {
        Output("SEARCHING FOR: " + kw);
        Task t = new Task(() => Search(kw));
        t.Start();
        t.Wait();
    }

    Console.ReadLine();
}

static async void Search(string keyword)
{
    // code for searching
}

问题在于它不会等待第一个任务完成执行。它会同时触发后续任务。

我正在使用速率有限的API,所以我想一个接一个地做。

为什么在开始下一次搜索之前没有等待一次搜索完成?

1 个答案:

答案 0 :(得分:12)

您的gem install nokogiri -v 1.5.11 -- --use-system-libraries 方法只返回async,这意味着没有简单的方法等待它完成。 (您几乎应该总是避免使用void方法。它们实际上只是为了订阅活动而提供的。)您的任务只是调用async void,而您正在等待它&#34;我称之为方法&#34;完成...它将立即完成。

如果您确实想要连续执行某些操作,那么您根本不清楚为什么要使用异步,但我建议您将代码更改为更像这样:

Search