Task使用

博客介绍了异步方法不同返回值类型的使用场景,如Task<T>用于获取T类型返回值,Task用于追踪执行状态,void用于“调用并忘记”。还说明了异步和同步方法的区别,指出异步方法非阻塞,将耗时任务设为异步可提高程序运行效率。

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

① Task<T>:如果调用方法想通过调用异步方法获取一个T类型的返回值,那么签名必须为Task<TResult>;

② Task:如果调用方法不想通过异步方法获取一个值,仅仅想追踪异步方法的执行状态,那么我们可以设置异步方法签名的返回值为Task;

③ void:如果调用方法仅仅只是调用一下异步方法,不和异步方法做其他交互,我们可以设置异步方法签名的返回值为void,这种形式也叫做“调用并忘记”。

异步和同步都是形容方法的,同步方法需要调用方法之后需要等待方法完成返回才能执行后续代码,当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调用者不用等待该方法执行完毕,我们称这个方法为异步方法。异步的好处在于非阻塞(调用线程不会暂停执行去等待子线程完成),因此我们把一些不需要立即使用结果、较耗时的任务设为异步执行,可以提高程序的运行效率。

https://www.cnblogs.com/wyy1234/p/9172467.html

### C# 中 `Task` 的使用方法 #### 创建和启动任务 创建并启动一个简单的任务可以使用 `Task.Run()` 方法,这是一种推荐的方法来执行后台工作。下面是一个基本的例子: ```csharp using System; using System.Threading.Tasks; class Program { static async Task Main() { // 使用 Task.Run 创建并启动一个任务(推荐方法) await Task.Run(() => { Console.WriteLine("Hello from the task!"); }); Console.WriteLine("Task completed."); } } ``` 这段代码展示了如何通过 `await Task.Run(...)` 启动一个新的任务,并等待它完成后再继续主线程的工作[^1]。 #### 取消任务 为了能够取消正在运行的任务,在定义任务时应当接受一个 `CancellationToken` 参数,并在适当的地方调用其 `ThrowIfCancellationRequested()` 或者直接检测是否已请求取消。这允许外部机制通知任务应该停止操作。 #### 等待多个任务中的某一个完成 当有多个并发执行的任务时,如果只需要知道其中一个何时完成了,则可利用 `Task.WaitAny(Task[] tasks)` 静态方法实现这一点。此函数会阻塞当前线程直到指定数组中至少有一个任务已完成为止。 ```csharp var task1 = Task.Run(() => { /* 任务1 */ }); var task2 = Task.Run(() => { /* 任务2 */ }); // 返回最先完成的那个索引位置 int index = Task.WaitAny(new[] {task1, task2}); Console.WriteLine($"The first finished task was at index: {index}"); ``` 这里演示了两个不同任务的同时启动以及获取最早结束者的逻辑[^2]。 #### 继续另一个任务 (Continue With) 一旦某个特定任务完成后立即想要触发另一项工作的场合下,可以采用 `.ContinueWith(Action<Task> action)` 来安排后续动作。该特性使得编程人员可以在前序任务结束后无缝衔接新的处理流程而无需显式同步控制结构。 ```csharp var initialTask = Task.Run(() => DoWork()); initialTask.ContinueWith((prevTask) => AfterDoWork(prevTask.Result)); ``` 上述片段说明了一个典型场景——先做某些事情(`DoWork`)再基于这些结果采取进一步措施(`AfterDoWork`)。 #### 获取线程 ID 和状态管理 对于更细粒度的调试或者日志记录需求来说,可以通过访问 `Thread.CurrentThread.ManagedThreadId` 属性得知当前上下文中所处的具体线程编号;另外关于任务本身的状态变化也可以被追踪到,比如从创建 (`Created`) 到准备就绪 (`WaitingToRun`) 过渡期间的变化情况等[^3]^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值