标题:C#并行编程Task类用法介绍
什么是Task类?
Task类是C#并行编程中最重要的类之一,它可以用来表示一个异步操作或者一组异步操作,并且可以方便地实现并行编程。
如何使用Task类?
使用Task类有以下几个基本步骤:
步骤一:定义异步任务
需要定义一个表示异步任务的委托,例如:
Func<int, int> computeDelegate = (input) =>
{
// 实现具体的异步计算逻辑
int result = input * 2;
return result;
};
步骤二:创建Task对象
可以通过以下方式创建一个表示异步任务的Task对象:
Task<int> computeTask = Task<int>.Factory.StartNew(() =>
{
return computeDelegate(10);
});
步骤三:等待任务完成并获取结果
可以使用以下方式等待任务完成并获取结果:
computeTask.Wait();
int result = computeTask.Result;
示例一:计算斐波那契数列
以下示例使用Task类实现了计算斐波那契数列的逻辑:
static async Task<int> FibonacciAsync(int n)
{
int result = await Task.Run(() =>
{
if (n <= 1) return n;
return FibonacciAsync(n - 1).Result + FibonacciAsync(n - 2).Result;
});
return result;
}
示例二:使用Task.WaitAll并行执行任务
以下示例使用Task.WaitAll方法并行执行多个任务:
static void Main(string[] args)
{
Task[] tasks = new Task[3]
{
Task.Factory.StartNew(() => DoSomething(100)),
Task.Factory.StartNew(() => DoSomething(200)),
Task.Factory.StartNew(() => DoSomething(300))
};
Task.WaitAll(tasks);
}
static void DoSomething(int timeout)
{
Console.WriteLine("DoSomething start: " + DateTime.Now.ToString());
Task.Delay(timeout).Wait();
Console.WriteLine("DoSomething end: " + DateTime.Now.ToString());
}
运行结果为:
DoSomething start: 6/28/2021 10:34:25 PM
DoSomething start: 6/28/2021 10:34:25 PM
DoSomething start: 6/28/2021 10:34:25 PM
DoSomething end: 6/28/2021 10:34:26 PM
DoSomething end: 6/28/2021 10:34:26 PM
DoSomething end: 6/28/2021 10:34:26 PM
可以看到,三个任务都是在同一时间开始执行,但却不是按顺序执行而是并行执行的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#并行编程Task类用法介绍 - Python技术站