You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C#的SomeRequests方法并行执行3次后再运行OtherMethod?

解决方案

要实现SomeRequests并行执行3次,全部完成后再运行OtherMethod,可以根据SomeRequests的类型(同步/异步)选择不同的实现方式:

场景1:SomeRequests是同步方法

如果SomeRequests是无返回值的同步方法,可通过以下两种方式实现并行执行:

方式1:使用Parallel.Invoke

Parallel.Invoke会自动处理并行调度,等待所有传入的委托执行完成后才继续后续代码:

static void Main(string[] args)
{
    Codes();
    Console.ReadKey();
}

private static void Codes()
{
    while (true)
    {
        // 并行执行3次SomeRequests,全部完成后才继续
        Parallel.Invoke(
            () => SomeRequests(),
            () => SomeRequests(),
            () => SomeRequests()
        );
        OtherMethod();
    }
}

方式2:使用Task.WaitAll

通过Task.Run将同步方法包装为任务,再用Task.WaitAll等待所有任务完成:

static void Main(string[] args)
{
    Codes();
    Console.ReadKey();
}

private static void Codes()
{
    while (true)
    {
        // 创建3个并行任务
        var tasks = new List<Task>();
        for (int i = 0; i < 3; i++)
        {
            tasks.Add(Task.Run(() => SomeRequests()));
        }
        // 等待所有任务完成
        Task.WaitAll(tasks.ToArray());
        OtherMethod();
    }
}

场景2:SomeRequests是异步方法(返回Task)

如果SomeRequests是异步方法(比如内部调用了异步HTTP请求),推荐使用async/await结合Task.WhenAll,这种方式不会阻塞线程,性能更优:

static async Task Main(string[] args) // Main方法改为async Task
{
    await Codes();
    Console.ReadKey();
}

private static async Task Codes()
{
    while (true)
    {
        // 创建3个异步任务并并行执行
        var tasks = new List<Task>();
        for (int i = 0; i < 3; i++)
        {
            tasks.Add(SomeRequests()); // 直接调用异步方法,无需Task.Run包装
        }
        // 等待所有异步任务完成
        await Task.WhenAll(tasks);
        OtherMethod();
    }
}

// 假设SomeRequests是异步方法
private static async Task SomeRequests()
{
    // 示例:异步请求逻辑
    await Task.Delay(1000); // 模拟异步操作
}

关键说明

  • Parallel.Invoke适合简单的同步方法并行,内部会根据CPU核心数优化调度。
  • 异步场景下必须使用await Task.WhenAll,避免阻塞主线程,同时确保所有异步操作完成后再执行OtherMethod。
  • 原代码中的for循环是串行执行,改造后通过并行API实现了真正的同时运行。

内容的提问来源于stack exchange,提问作者mahvettin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:52:51