C#学习笔记 任务操作

本文介绍了C#中任务(Task)的使用,包括创建和执行有返回值和无返回值的任务,如何创建可取消的任务,执行多个任务的策略如延续任务、任务和子任务,以及如何使用任务工厂。通过示例代码展示了如何利用Task进行异步操作,以及在需要时取消任务的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用线程,可以方便地进行异步操作。但是线程模型有一个缺点,就是无法处理返回值。要在不同线程之间传递数据比较麻烦。任务则解决了这个问题。

完整代码在这里:https://github.com/techstay/csharp-learning-note

创建并执行任务

有返回值和没有返回值的任务

要创建一个没有返回值的任务,只需要向Task类的构造函数传递一个参数列表和返回值都为空的委托(也就是Action委托)即可。构造好一个Task之后,就可以调用Start方法开始执行任务,就像Thread上调用Start一样。这样任务就会开始异步地执行了。

要等待任务完成,可以调用Wait方法,这样就会在该线程上阻塞直到Task完成。另外WaitAny和WaitAll方法接受一个Task数组,WaitAny方法会阻塞调用线程直到有一个Task任务完成,而WaitAll方法会阻塞调用线程直到所有任务完成。

另外,还可以像Task的构造函数传递一个TaskCreationOptions枚举来控制Task的构造和执行。详情可以查看MSDN文档。

Task task1 = new Task(() => Console.WriteLine("创建一个新任务..."));
task1.Start();
task1.Wait();
Task.Run(() => Console.WriteLine("直接运行一个新任务..."))
    .Wait();

要创建带有返回值的任务,需要创建一个泛型Task,并向其传入一个Function< TResult>委托。然后便可以执行任务,任务执行完成之后可以调用其Result属性查询任务执行的结果。如果此时任务还没有完成,调用Result的线程会阻塞直到任务完成。如果有异常发生,也会在这个时候抛出。

另外,由于创建一个任务并开始运行是非常常见的代码,所以Task类提供了一个Run方法,接受一个委托并立即创建并执行任务。

Task<int> intValue = Task.Run(() =>
{
    Console.WriteLine("创建一个任务并等待结果..");
    return 0;
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值