复制
收藏
提问
简洁
使用5条Task线程从一加到一千
2个月前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
使用Task实现多线程累加
- Task简介:Task 是 .NET Framework 4.0 引入的,基于 ThreadPool 的异步任务模式,用于简化异步编程。123
- 线程池:ThreadPool 提供了一组预先创建的线程,Task 会从线程池中获取线程来执行任务。2
- 异步编程:从 .NET Framework 4.5 开始,Task 支持 async/await 模式,进一步简化异步编程。7
实现步骤
- 创建Task:定义一个方法,用于执行累加操作。
- 分割任务:将累加任务分割成多个子任务,每个 Task 处理一部分。
- 启动Task:创建并启动 Task,等待所有 Task 完成。
示例代码
using System;
using System.Linq;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
int total = 0;
int numberOfTasks = 5;
int range = 1000 / numberOfTasks;
Task[] tasks = new Task[numberOfTasks];
for (int i = 0; i < numberOfTasks; i++)
{
int start = i * range + 1;
int end = (i == numberOfTasks - 1) ? 1000 : (start + range - 1);
tasks[i] = Task.Run(() =>
{
for (int j = start; j <= end; j++)
{
Interlocked.Add(ref total, j);
}
});
}
await Task.WhenAll(tasks);
Console.WriteLine($"Total: {total}");
}
}
要点说明
- Interlocked.Add:用于在多线程环境中安全地累加值。
- Task.WhenAll:等待所有 Task 完成。
- async/await:简化异步代码的编写。7
你觉得结果怎么样?