C# 同时多次调用api的最佳方法是什么?
我想同时调用一个API,例如,用户将输入要模拟的客户端数量,例如10个。然后我想同时模拟10个api调用 最好的方法是什么 你可以C# 同时多次调用api的最佳方法是什么?,c#,.net,multithreading,C#,.net,Multithreading,我想同时调用一个API,例如,用户将输入要模拟的客户端数量,例如10个。然后我想同时模拟10个api调用 最好的方法是什么 你可以 void Main() { var sw = new Stopwatch(); Console.WriteLine("For really parallel, operation should take about 1 second"); Console.WriteLine("ReallyParallel"); sw
void Main()
{
var sw = new Stopwatch();
Console.WriteLine("For really parallel, operation should take about 1 second");
Console.WriteLine("ReallyParallel");
sw.Start();
ReallyParallel();
sw.Stop();
Console.WriteLine($"ReallyParallel for {sw.Elapsed}");
Console.WriteLine("NotReallyParallel_TPL");
sw.Restart();
NotReallyParallel_TPL();
sw.Stop();
Console.WriteLine($"NotReallyParallel_TPL for {sw.Elapsed}");
Console.WriteLine("NotReallyButGoodOne");
sw.Restart();
NotReallyButGoodOne();
sw.Stop();
Console.WriteLine($"NotReallyButGoodOne for {sw.Elapsed}");
}
如果你想打很多电话,就用这个
void NotReallyButGoodOne()
{
var tasks = new List<Task>();
for (var i = 0; i < 10; i++)
{
tasks.Add(Task.Run(() => CallAPI()));
}
Task.WaitAll(tasks.ToArray());
}
如果你想打几个电话,可以使用这个方法(这实际上是并行的,但可能效率很低)
一个非常广泛的问题。然而,使用Parallel.ForEach或来自TPL的其他东西来实现这类功能是很常见的。基本上,我有一个调用api的函数,我想执行用户想要执行多少次的函数。我不想一个接一个地运行,而是应该能够并行运行。我尝试了并行。但操作类型应为INT。这将是并行的解决方案,但同步如何,如果我花时间,它将是不同的。添加的计时,您可以检查它。不感兴趣,为什么您将
并行分类。对于为“不是真正的并行”?@stuartd,因为它取决于并行设置。默认情况下,它自行决定何时运行单独的操作,如果您尝试同时启动100个操作,则只有几个操作将并行运行,其他操作将等待上一个操作完成。如果用户输入1000,在这种情况下,将创建1000个线程或1000个任务,哪个方法将有效
void NotReallyParallel_TPL()
{
Parallel.For(1, 10, i => CallAPI());
}
void ReallyParallel()
{
var threads = new List<Thread>();
for (var i = 0; i < 10; i++)
{
var t = new Thread(() => CallAPI());
t.Start();
threads.Add(t);
}
foreach (var t in threads)
{
t.Join();
}
}
void CallAPI()
{
// callig stuff
Thread.Sleep(1000);
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}");
}