zoukankan      html  css  js  c++  java
  • 任务29:自己动手构建RequestDelegate管道

    cmd创建一个控制台应用程序

    dotnet new console --name MyPipeline

    用VSCode打开这个项目

     新建类RequestDelegate.cs的类文件复制Program里面的代码到RequestDelegate里面代码修改

    引入命名空间。

    创建一个delegaet 叫做 RequestDelegate

    为了演示用,新建一个Context.cs

    完善RequestDelegate

    新建一个List接收一个RequestDelegate返回一个Delegate

    public static List<Func<RequestDelegate,RequestDelegate>> _list=new List<Func<RequestDelegate, RequestDelegate>>();

    模拟我们的ApplicationBuilder里面的方法新建Use的方法,接受一个Func里面接受一个RequestDelegate返回一个RequestDelegate

      public static void Use(Func<RequestDelegate, RequestDelegate> middleware)
      {
         _list.Add(middleware);
      }
    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    
    namespace MyPipeline
    {
        class Program
        {
            public static List<Func<RequestDelegate,RequestDelegate>> _list=new List<Func<RequestDelegate, RequestDelegate>>();
            static void Main(string[] args)
            {
                 Use(next=>{
                    return context=>{
                        Console.WriteLine("1");
                        return next.Invoke(context);
                         //return Task.CompletedTask;
                    };
                });
                 Use(next=>{
                    return context=>{
                        Console.WriteLine("2");
                        return next.Invoke(context);
                    };
                });
    
                RequestDelegate end= (context)=>{
                    Console.WriteLine("end.....");
                    return Task.CompletedTask;
                };
                _list.Reverse();//顺序反转
                foreach(var middleware in _list)
                {
                    end=middleware.Invoke(end);
                }
    
               
                end.Invoke(new Context());
                Console.ReadLine();
            }
    
            public static void Use(Func<RequestDelegate, RequestDelegate> middleware)
            {
                _list.Add(middleware);
            }
    
        }
    }
    Program.cs

     dotnet run 执行

    执行到1 没有再往下执行

    以上就是整个Http管道的构成过程

  • 相关阅读:
    GEF: 图形拖拽处理
    【矩阵快速幂】bzoj1297 [SCOI2009]迷路
    【扩展欧几里得】NOIP2012同余方程
    【高精度乘法】NOIP2003麦森数
    【数论·错位排列】bzoj4517 排列计数
    【数论】Lucas
    【NOIP2012】疫情传递
    【NOIP2012】旅行计划
    【Manacher算法】求最长回文串的优秀算法
    【Tarjan】洛谷P3379 Tarjan求LCA
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/10367256.html
Copyright © 2011-2022 走看看