You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建并启动Task,无需async await设置完成处理程序

使用Task库实现经典完成处理程序逻辑(无async/await)

基础示例:带结果返回的任务+完成处理程序

以下代码演示如何创建并启动任务,通过ContinueWith绑定完成处理程序,在任务结束后自动执行后续逻辑并访问结果:

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        // 创建并启动一个耗时计算任务(默认使用线程池)
        var calculationTask = Task.Run(() => {
            // 模拟耗时操作
            Thread.Sleep(2000);
            return 42; // 任务返回的结果
        });

        // 绑定完成处理程序:任务结束后自动触发
        calculationTask.ContinueWith(completedTask => {
            // 处理任务不同状态
            if (completedTask.IsFaulted)
            {
                Console.WriteLine($"任务执行失败: {completedTask.Exception.InnerException.Message}");
            }
            else if (completedTask.IsCanceled)
            {
                Console.WriteLine("任务已被取消");
            }
            else
            {
                // 访问任务结果,执行后续逻辑
                Console.WriteLine($"任务完成,计算结果: {completedTask.Result}");
            }
        }, TaskContinuationOptions.ExecuteSynchronously); // 指定在原任务线程同步执行(可选)

        // 主线程继续执行其他操作(示例中保持控制台窗口打开)
        Console.WriteLine("主线程正在处理其他工作...");
        Console.ReadLine();
    }
}

关键说明

  • Task.Run:快速创建并启动基于线程池的任务,无需手动管理线程。
  • ContinueWith:Task库中实现完成处理程序的核心API,它会在绑定的任务完成(成功/失败/取消)后自动执行。
  • TaskContinuationOptions.ExecuteSynchronously:可选参数,让延续任务在原任务的线程上执行(如果原任务线程尚未终止),符合你要求的“可能在Task的线程上运行”的场景。
  • 可通过completedTask参数访问原任务的状态(IsFaulted/IsCanceled)和结果(Result)。

另一种任务创建方式:先实例化再启动

如果需要更精细控制任务创建时机,可以先实例化Task再启动:

var dataFetchTask = new Task<string>(() => {
    // 模拟数据获取操作
    Thread.Sleep(1500);
    return "从数据源获取的内容";
});

// 绑定完成处理程序
dataFetchTask.ContinueWith(task => {
    Console.WriteLine($"数据获取完成: {task.Result}");
});

// 手动启动任务
dataFetchTask.Start();

Console.WriteLine("主线程继续执行...");
Console.ReadLine();

内容的提问来源于stack exchange,提问作者g.pickardou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:36:29