.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 : 等待只要方法中的其中一个线程执行完毕,就返回 当前执行完毕的线程对象。

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

posted @ 2021-01-21 16:51  DavidChild  阅读(627)  评论(1编辑  收藏  举报