📜  c# 创建任务并等待所有 - C# (1)

📅  最后修改于: 2023-12-03 14:39:45.360000             🧑  作者: Mango

C# 创建任务并等待所有

在 C# 中创建任务并等待所有任务完成是常见的任务处理要求。在本文中,我们将介绍如何使用 C# 中的 Task API 创建并等待任务的完成。

创建任务

在 C# 中,使用 Task 类型创建一个可以异步执行的任务。以下是创建任务的基本语法:

Task task = Task.Run(() => 
{
    // 在这里写异步执行的任务代码
});

在上面的代码中,Task.Run() 方法接受一个 lambda 表达式作为参数,这个 lambda 表达式包含异步执行的任务代码。Task.Run() 方法将这个 lambda 表达式封装成一个 Task 类型的对象并返回,我们可以将这个对象存储在一个变量中,以便后续使用。

等待任务完成

在 C# 中,可以使用 Task.WaitAll() 方法等待所有任务完成。以下是等待任务完成的基本语法:

Task[] tasks = new Task[n];
for (int i = 0; i < n; i++) 
{
    tasks[i] = Task.Run(() =>
    {
        // 在这里写异步执行的任务代码
    });
}
Task.WaitAll(tasks);

在上面的代码中,我们首先创建一个长度为 n 的 Task 数组,每个元素都包含一个异步执行的任务代码。然后我们使用 Task.WaitAll() 方法等待所有任务完成。Task.WaitAll() 方法接受一个 Task 数组作为参数,等待这个 Task 数组中所有任务执行完成后返回。

完整示例

下面是一个完整的示例,它创建了两个异步任务并等待它们的完成:

using System;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        Task task1 = Task.Run(() =>
        {
            Console.WriteLine("Task 1 started...");
            Task.Delay(1000).Wait();
            Console.WriteLine("Task 1 completed.");
        });

        Task task2 = Task.Run(() =>
        {
            Console.WriteLine("Task 2 started...");
            Task.Delay(2000).Wait();
            Console.WriteLine("Task 2 completed.");
        });

        Task.WaitAll(task1, task2);
        Console.WriteLine("All tasks completed.");
    }
}

在上面的代码中,我们创建了两个异步任务,每个任务都模拟了一个时间上的延迟。在任务全部完成后,我们输出了一条消息,表示所有任务已完成。

总结

使用 C# 中的 Task API 可以方便地创建和管理异步任务。我们可以使用 Task.Run() 方法创建异步任务,使用 Task.WaitAll() 等待所有任务完成。在实际开发中,这种方式非常常见,并且可以帮助我们提高应用程序的性能和并发处理能力。