当前位置: 首页 > news >正文

C# Task 学习记录

        在 C# 中,Task是用于表示异步操作的核心类型之一,提供了一种简单、高效的方式来处理异步操作,使得开发者可以轻松地编写非阻塞的代码。下面是C# Task例子,包含取消、超时、延续任务、获取任务执行情况:

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

public class Program
{
    private static CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
    public static void Main(string[] args)
    {
        asyncStaticFunction();
        Console.Read();
    }

    public async static void asyncStaticFunction()
    {

        Task<string> task;
        string result = "被中断";
        //cancellationTokenSource.CancelAfter(10);//设置超时,会在10毫秒取消任务
        task = testTask("Hello world", cancellationTokenSource.Token);
        task.ContinueWith(t =>
        {
            Console.WriteLine(t.Status.ToString());
        }, TaskContinuationOptions.ExecuteSynchronously);//同步执行延续任务
        try
        {
            result = await task;
        }
        catch (OperationCanceledException ex)
        {
            Console.WriteLine("testTask发生错误:被取消了");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"testTask发生错误:{ex.Message}");
        }
        if (task.IsCompleted)//不管是出错还是取消,IsCompleted都会是true
        {
            Console.WriteLine("testTask完成了");
        }
        if (task.IsCanceled)
        {
            Console.WriteLine("testTask被取消了");
        }
        if (task.IsFaulted)
        {
            Console.WriteLine("testTask出错了");
        }
        Console.WriteLine($"testTask返回值:{result}");
    }

    public async static Task<string> testTask(string message, CancellationToken cancellationToken)//不需要返回值就直接Task类型
    {
        for (int time = 0; time < 10; time++)
        {
            cancellationToken.ThrowIfCancellationRequested();
            Console.WriteLine($"testTask{time}:{message}");
            await Task.Delay(100);
            if (time == 5 && false)//为true会结束任务,会进入asyncStaticFunction的catch (Exception ex) , Console.WriteLine($"testTask返回值:{result}");输出被中断
            {
                throw new Exception("testTask错误");
            }
            if (time == 5 && true)//为true会结束任务,进入asyncStaticFunction的catch (OperationCanceledException ex), Console.WriteLine($"testTask返回值:{result}");输出被中断
            {
                cancellationTokenSource.Cancel();
            }
        }
        return "testTask完成";
    }
}

相关文章:

  • 3、树莓派5 安装VNC查看器 开启VNC服务器
  • linu软件编程——IO
  • 2月15日星期六今日早报简报微语报早读
  • React - 高阶函数-函数柯里化
  • 2015-2024年上市公司商道融绿esg评级数据
  • 寒假刷题Day24
  • Word正文中每两个字符之间插入一个英文半角空格
  • 服务器虚拟化(详解)
  • 枚举Enum用法
  • ros:ur机械臂初识
  • 基于STM32的智能垃圾分类回收系统
  • 【kafka系列】At Most Once语义
  • matlab-simulink
  • 鲸鱼算法优化Transformer+KAN网络并应用于时序预测任务
  • TrueNAS in Hyper-V
  • React:初识React
  • 脉冲当量含义
  • 国内已经部署DeepSeek的第三方推荐
  • Java 基于 SpringBoot+Vue 的家政服务管理平台设计与实现
  • TypeScript type 和 interface 的区别
  • 19岁女生注射头孢离世后续:院方道歉,医生停职,监管介入
  • 金地集团:今年前4个月实现销售额109.3亿元,同比下降52.44%
  • 上海推动AI+文旅深度融合,MaaS平台和产业基地落地徐汇
  • 化学家、台湾地区“中研院”原学术副院长陈长谦逝世
  • 鸿蒙电脑正式亮相,五年布局积累超2700项核心专利
  • 上海:下调个人住房公积金贷款利率