gpt4 book ai didi

c# - Task.Wait() 不等待任务完成

转载 作者:太空狗 更新时间:2023-10-29 22:15:43 27 4
gpt4 key购买 nike

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

这是我的代码:

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,所以我想一个接一个地做。

为什么不等待一次搜索完成再开始下一次搜索?

最佳答案

您的async 方法只返回void,这意味着没有任何简单的方法可以等待它完成。 (你应该几乎总是避免使用 async void 方法。它们实际上只是为了订阅事件才可用。)你的任务只是调用 Search,你是等待“我已经调用方法”完成......它几乎会立即完成。

如果你真的想连续做事,你为什么要使用异步还不清楚,但我建议你改变你的代码,让它看起来更像这样:

static void Main()
{
// No risk of deadlock, as a console app doesn't have a synchronization context
RunSearches().Wait();
Console.ReadLine();
}

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

foreach(var kw in kwl)
{
Output("SEARCHING FOR: " + kw);
await Search(kw);
}
}

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

关于c# - Task.Wait() 不等待任务完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38241875/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com