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

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

  • 相关阅读:
    P2639 [USACO09OCT]Bessie的体重问题Bessie's We…
    P2871 [USACO07DEC]手链Charm Bracelet
    P1983 车站分级
    P1038 神经网络
    P1991 无线通讯网
    P1546 最短网络 Agri-Net
    P1197 [JSOI2008]星球大战
    P1004 方格取数
    P1111 修复公路
    pd_ds 之 hash
  • 原文地址:https://www.cnblogs.com/davidchildblog/p/14306397.html
Copyright © 2011-2022 走看看