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管道的构成过程

  • 相关阅读:
    B
    Labyrinth 树的直径加DFS
    Speech to Text for iOS
    苹果开发者:Siri未开放API 有些让人失望
    ios6.0 siri语音识别
    Sample example for Speech to Text in iOS
    iOS升级经验分享
    苹果放宽了 iOS 5.0 对应用本地存储的限制
    iOS5可能会删除本地文件储存
    iOS 5 does not allow to store downloaded data in Documents directory? ios5.0及以后的版本对于下载的文件存储路径有了改变
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/10367256.html
Copyright © 2011-2022 走看看