📅  最后修改于: 2023-12-03 14:57:55.643000             🧑  作者: Mango
在 C# 中,异步编程是一种处理耗时操作的方式,可以提高应用程序的性能和响应能力。然而,在某些情况下,我们需要同时运行多个异步方法并行地执行。本文将介绍如何在 C# 中运行异步方法并行执行,并提供示例代码。
在 C# 中,有多种方法可以并行执行异步方法。下面是其中几种常用的方法:
Task.WhenAll
Task.WhenAll
方法接收一个由异步任务(Task
或 Task<T>
)组成的数组,并返回一个新的任务,该任务在所有输入任务都完成时完成。可以使用此方法来并行执行多个异步方法。
public async Task RunAsyncMethodsParallelAsync()
{
Task task1 = Method1Async();
Task task2 = Method2Async();
Task task3 = Method3Async();
await Task.WhenAll(task1, task2, task3);
// 所有异步方法都已完成
}
Parallel.ForEach
Parallel.ForEach
方法是用于在并行任务中执行循环迭代的方法。可以使用此方法来并行执行一组异步方法。
public async Task RunAsyncMethodsParallelAsync()
{
var tasks = new List<Task>
{
Task.Run(async () => await Method1Async()),
Task.Run(async () => await Method2Async()),
Task.Run(async () => await Method3Async())
};
await Task.WhenAll(tasks);
// 所有异步方法都已完成
}
Task.Run
和 await
Task.Run
方法用于在线程池中运行指定的方法,并返回一个表示该操作的异步任务。可以使用此方法结合 await
关键字来并行执行异步方法。
public async Task RunAsyncMethodsParallelAsync()
{
var task1 = Task.Run(async () => await Method1Async());
var task2 = Task.Run(async () => await Method2Async());
var task3 = Task.Run(async () => await Method3Async());
await Task.WhenAll(task1, task2, task3);
// 所有异步方法都已完成
}
下面是一个完整的示例代码,演示了如何并行执行异步方法:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
await RunAsyncMethodsParallelAsync();
Console.WriteLine("所有异步方法都已完成");
}
public static async Task RunAsyncMethodsParallelAsync()
{
var tasks = new List<Task>
{
Task.Run(async () => await Method1Async()),
Task.Run(async () => await Method2Async()),
Task.Run(async () => await Method3Async())
};
await Task.WhenAll(tasks);
}
public static async Task Method1Async()
{
// 异步任务1
await Task.Delay(1000);
Console.WriteLine("方法1执行完毕");
}
public static async Task Method2Async()
{
// 异步任务2
await Task.Delay(2000);
Console.WriteLine("方法2执行完毕");
}
public static async Task Method3Async()
{
// 异步任务3
await Task.Delay(3000);
Console.WriteLine("方法3执行完毕");
}
}
以上示例代码中,我们定义了三个异步方法 Method1Async
、Method2Async
和 Method3Async
,它们分别模拟耗时的异步操作。在 RunAsyncMethodsParallelAsync
方法中,并行地运行这些方法,并通过 Task.WhenAll
等待它们全部完成。在 Main
方法中调用 RunAsyncMethodsParallelAsync
方法并输出 "所有异步方法都已完成"。
通过上述方法,我们可以在 C# 中实现并行地执行异步方法,以提高应用程序的性能和效率。
希望本文对你有所帮助!