首页 > 其他分享 >net core 异步超时取消机制

net core 异步超时取消机制

时间:2023-12-13 15:47:32浏览次数:34  
标签:core Task Console 异步 Method1 token static WriteLine net

方法一:

利用Task.WhenAny
namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
            CancellationTokenSource cts = new CancellationTokenSource();

            Task taskMethod1 = Method1(cts.Token);
            Task taskComplete = Task.WhenAny(taskMethod1, Task.Delay(100, cts.Token));

            if (taskComplete != taskMethod1) //超时
            {
                cts.Cancel();
            }

            Console.WriteLine("end");

            Console.ReadLine();

        }

        public static async Task Method1(CancellationToken token)
        {
            Console.WriteLine("Method1 start");
            await Task.Delay(1000, token);
            Console.WriteLine("Method1 end");
        }
        public static async Task Method2(CancellationToken token)
        {
            await Task.Delay(2000, token);
            Console.WriteLine("Method2");
        }

    }
}

方法二:

.WaitAsync
namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");

            Demo();

            Console.WriteLine("end");

            Console.ReadLine();

        }
        public static async Task Demo()
        {
            CancellationTokenSource cts = new CancellationTokenSource();

            try
            {
                await Method2(cts.Token).WaitAsync(TimeSpan.FromSeconds(1));
            }
            catch (Exception ex)
            {
                Console.WriteLine("timeout");
                cts.Cancel();

            }
        }

        public static async Task Method1(CancellationToken token)
        {
            Console.WriteLine("Method1 start");
            await Task.Delay(1000, token);
            Console.WriteLine("Method1 end");
        }
        public static async Task Method2(CancellationToken token)
        {
            try
            {
                await Task.Delay(5000, token);
                Console.WriteLine("Method2");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{ex.Message}");
            }

        }
        public static async Task Method3()
        {
            await Task.Delay(2000);
            Console.WriteLine("Method2");
        }
    }
}

 

 

标签:core,Task,Console,异步,Method1,token,static,WriteLine,net
From: https://www.cnblogs.com/cxxtreasure/p/17899174.html

相关文章

  • .NET 依赖注入的3中方式
    一、简介    依赖注入共有3种方式:构造函数注入、属性注入、方法注入二、构造函数注入    在program.cs中对组件进行注册:   builder.Services.AddScoped<IScopedService,ScopedService>();    服务注册配置后,在需要注入的类上使用构造函数。pu......
  • Netty04-优化与源码
    优化与源码分析1.优化1.1扩展序列化算法序列化,反序列化主要用在消息正文的转换上序列化时,需要将Java对象变为要传输的数据(可以是byte[],或json等,最终都需要变成byte[])反序列化时,需要将传入的正文数据还原成Java对象,便于处理目前的代码仅支持Java自带的序列化,反......
  • 5分钟搞懂Kubernetes:轻松理解所有组件
    之前我曾经提到了一系列关于服务网格的内容。然而,我意识到有些同学可能对Kubernetes的了解相对较少,更不用说应用服务网格这个概念了。因此,今天我决定带着大家快速理解Kubernetes中的一些专有名词,以便在短时间内入门,并减少学习的时间。我将在接下来的5分钟内为你介绍这些名词,希望你......
  • 5分钟搞懂Kubernetes:轻松理解所有组件
    之前我曾经提到了一系列关于服务网格的内容。然而,我意识到有些同学可能对Kubernetes的了解相对较少,更不用说应用服务网格这个概念了。因此,今天我决定带着大家快速理解Kubernetes中的一些专有名词,以便在短时间内入门,并减少学习的时间。我将在接下来的5分钟内为你介绍这些名词,希望你......
  • 关于使用appium自动化启动app时报错【问题:AttributeError: ‘NoneType‘ object has n
    报错原因:安装了最新版的appium3.0.0和selenium的最新版本,导致版本冲突从而导致报错:AttributeError:'NoneType'objecthasnoattribute'to_capabilities'解决方案:卸载selenium和appium,下载低版本的appium【下载appium的同时会下载依赖selenium】 pipinstall......
  • Net 高级调试之十三:托管堆的几个经典破坏问题
    一、介绍今天是《Net高级调试》的第十三篇文章,这篇文章写作时间的跨度有点长。这篇文章我们主要介绍经典的案例,如何查找问题,如何解决问题,最重要我们看到了问题,要有解决的思路,没有思路就是死路一条了,当然,这个过程也不是一帆风顺的,我是做了很多遍,最终猜得到了想要的东......
  • Netty IO 和 Thrift IO
    1.NettyIONetty是一个高性能的异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。它极大地简化了网络编程,如TCP和UDP套接字服务器。异步和事件驱动:Netty基于事件驱动模型,可以处理成千上万个并发连接。高性能:优化的传输尝试减少资源消耗和延迟。......
  • orchardcore 部署saas系统
    使用orchardcore搭建saas的webhost服务网络托管服务是一种互联网托管服务,允许个人和组织通过万维网访问他们的网站。我们将使用OrchardCoreCMS框架创建一个多租户、SaaS、Web托管服务。1启动VisualStudio,然后“创建新项目”。选择“ASP.NETCoreWebApplication”......
  • 后端技术:asyncio异步编程
    异步的作用:异步非阻塞、asyncio详解如框架tornado、fastapi、django>=3.xasgi、aiohttp都是在用异步,异步可以提升性能笔记框架:协程--理论asyncio模块进行异步编程--理论实战代码1.协程协程是人为创造,不是计算机提供。就是用一个线程让代码切换运行协程(Corou......
  • 在 Kubernetes 中无侵入安装 OpenTelemetry 探针
    背景OpenTelemetry探针OpenTelemetry(简称Otel,最新的版本是1.27)是一个用于观察性的开源项目,提供了一套工具、APIs和SDKs,用于收集、处理和导出遥测数据(如指标、日志和追踪信息)。应用程序遥测数据(如追踪、指标和日志)的收集是通过探针来完成的,探针通常以库的形式集成到应用......