gpt4 book ai didi

c# - 如何在不等待 c# .Net 4.5.1 中的方法响应的情况下迭代调用方法?

转载 作者:行者123 更新时间:2023-11-30 17:50:06 25 4
gpt4 key购买 nike

首先,我为这个问题的糟糕措辞道歉......这是场景:

我构建了一个 WEB API 方法来接收 ProductID,然后将该产品图像上传到 Amazon S3。这部分工作正常。

我现在正在尝试运行一个控制台应用程序,它将获取一系列 ProductID 并循环遍历它们,调用 API 方法,而不是等待结果...

谁能指出我正确的方向?

我想另一个警告是不要耗尽运行控制台应用程序的机器上的所有资源...所以可能是线程上限?

更新(这似乎仍然是同步的):

class Program
{
async static void DoUpload(int itemid)
{
Console.WriteLine("Starting #:" + itemid);
Thread.Sleep(2000); //Simulates long call to API
Console.WriteLine("Finishing #:" + itemid);
}
static void Main(string[] args)
{
for (int i = 0; i < 20; i++)
{
DoUpload(i);
}
}
}

最佳答案

有几种简单的方法可以做到这一点。

我建议使用 Parallels .它可以最优化地使用您的环境中的许多线程/内核。对于您的示例,您只需执行如下操作:

var status = Parallel.For(0, 20, DoUpload);

while (!status.IsCompleted)
{
//Do something while you wait
}

另一种方法是使用任务,并将每个调用作为单独的任务发送。不过要小心使用这种方法,因为如果迭代次数过多,系统可能会因未决任务而过载。

List<Tasks> tasks = new List<Tasks>();

for (int i = 0; i < 20; i++)
{
var task = Task.Run(() => DoUpload(i));

tasks.Add(task);
}

//wait for completion of all tasks
Task.WaitAll(tasks.ToArray());

关于c# - 如何在不等待 c# .Net 4.5.1 中的方法响应的情况下迭代调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21034050/

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