如何在 .NET Core 上用 C# 并行执行不同的 REST API 请求?

KBN*_*nda 1 c# multithreading asynchronous async-await .net-core

问题陈述

我需要一次性发送多个 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)
{
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的

我正在尝试这样:

public async Task CallMultipleAPIs()
{
    await GetA("");
    await GetB(1);
    await GetC(1, "");
}
Run Code Online (Sandbox Code Playgroud)

这里如何实现并行呢?

Ste*_*ary 6

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

并发异步代码是通过使用以下方式完成的Task.WhenAll

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

  • 澄清一下:一旦 `GetA()` 发出 I/O 请求(如网络请求),控制权就会传递回 `CallMultipleAPIs()`,然后调用 `GetB()` 等。这在所有这些都发生在同一个线程上。它不是“并行”,因为“并行”意味着在不同线程上运行代码。 (2认同)