【问题标题】:How to execute different REST API requests in parallel in C# on .NET Core?如何在 .NET Core 上的 C# 中并行执行不同的 REST API 请求?
【发布时间】:2022-01-16 05:39:24
【问题描述】:

问题陈述

我需要一次性发送多个 API 调用。

我有三个不同的 API 端点,如下所示,所有这些都需要尽可能快地一起调用。这一切都是相互独立的。

public async Task<string> GetA(string a)
{
}

public async Task<string> GetB(int a)
{
}

public async Task<string> GetC(int a, string a)
{
}

我尝试了什么

我是这样尝试的:

public async Task CallMultipleAPIs()
{
    await GetA("");
    await GetB(1);
    await GetC(1, "");
}

这里如何实现并行?

【问题讨论】:

  • 不要直接等待任务,而是使用 Task.WhenAll 一起等待所有任务。
  • 你需要来自 c# 或其他的调用吗?
  • @Goniometr 仅在 C# 中

标签: c# multithreading asynchronous .net-core async-await


【解决方案1】:

您需要的是并发性(而不是并行性 - 即多线程)。

并发异步代码使用Task.WhenAll完成:

public async Task CallMultipleAPIs()
{
  var taskA = GetA("");
  var taskB = GetB(1);
  var taskC = GetC(1, "");
  await Task.WhenAll(taskA, taskB, taskC);
}

【讨论】:

  • 澄清一下:只要GetA() 发出一个 I/O 请求(如网络请求),控制权就会传回CallMultipleAPIs(),然后调用GetB(),等等。这是“并发“因为所有这些都发生在同一个线程上。它不是“并行”,因为“并行”意味着在不同的线程上运行代码。
猜你喜欢
  • 1970-01-01
  • 2022-08-19
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
相关资源
最近更新 更多