• .NET, NETCORE 怎么写 "超时"代码,解析"超时"代码原理!


    干货:本人不会长篇大论。能贴上去的,就是干货,能用一两句话讲明白的,不会大讲概念,不会浪费大家宝贵的时间。

    前言:我们发现,超时是个非常重要的概念,如果在通讯架构中,没有超时的设计,那么这个通讯架构就是废品。我们可以很清楚的发现,HTTP 请求,SOCKET  请求,底层都离不开响应超时。如果没有设置超时/或者超时时间设置过大,那么 调用层与被调用层 将产生严重的雪崩效应。接下来,我们来讲讲超时是如何实现的。

    直接贴上 干货代码--这是我 Bitter NetCore  Netty 通讯框架中的一段代码:


    private Task<RMessage> RegisterResultCallbackAsync(string id, int timeOut)
            {
                var tcs = new TaskCompletionSource<RMessage>();
    
                _resultDictionary.TryAdd(id, tcs);
    
                var task = tcs.Task;
                var taskTimeOut = Task.Delay(timeOut);
                Task.Factory.StartNew(() => {
                    if (Task.WhenAny(task, taskTimeOut).Result == taskTimeOut)
                    {
                        //处理超时业务逻辑
                       TimeOutCallBack(id);
                    }
                });
                //设置超时
    
                return task;
            }


    经典超时代码原理:代上述代码其实很简单,就是利用两个线程,一个业务线程,定义一个延迟 timeout执行的线程,将两个线程同时放入Task.WhenAny 方法中,Task.WhenAny : 等待只要方法中的其中一个线程执行完毕,就返回 当前执行完毕的线程对象。

    上述代码很简单,贴上去的就是核心代码-干货。希望对正在 怎么写超时的同学有用,我会不定期的上干!谢谢大家支持,请留个关注!

  • 相关阅读:
    C#进阶之路(五):Linq初识
    C#进阶之路(四):拉姆达
    SQL夯实基础(五):索引的数据结构
    SQL夯实基础(四):子查询及sql优化案例
    SQL夯实基础(三):聚合函数详解
    C#进阶之路(三):深拷贝和浅拷贝
    SQL夯实基础(二):连接操作中使用on与where筛选的差异
    前端面试题整理—HTML/CSS篇
    CSS盒模型
    node的优缺点及应用场景
  • 原文地址:https://www.cnblogs.com/davidchildblog/p/14306397.html
Copyright © 2020-2023  润新知