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

dotnet new console --name MyPipeline

用VSCode打开这个项目

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

引入命名空间。

创建一个delegaet 叫做 RequestDelegate

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

完善RequestDelegate

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

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

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

  1. public static void Use(Func<RequestDelegate, RequestDelegate> middleware)
  2. {
  3. _list.Add(middleware);
  4. }
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4.  
  5. namespace MyPipeline
  6. {
  7. class Program
  8. {
  9. public static List<Func<RequestDelegate,RequestDelegate>> _list=new List<Func<RequestDelegate, RequestDelegate>>();
  10. static void Main(string[] args)
  11. {
  12. Use(next=>{
  13. return context=>{
  14. Console.WriteLine("");
  15. return next.Invoke(context);
  16. //return Task.CompletedTask;
  17. };
  18. });
  19. Use(next=>{
  20. return context=>{
  21. Console.WriteLine("");
  22. return next.Invoke(context);
  23. };
  24. });
  25.  
  26. RequestDelegate end= (context)=>{
  27. Console.WriteLine("end.....");
  28. return Task.CompletedTask;
  29. };
  30. _list.Reverse();//顺序反转
  31. foreach(var middleware in _list)
  32. {
  33. end=middleware.Invoke(end);
  34. }
  35.  
  36. end.Invoke(new Context());
  37. Console.ReadLine();
  38. }
  39.  
  40. public static void Use(Func<RequestDelegate, RequestDelegate> middleware)
  41. {
  42. _list.Add(middleware);
  43. }
  44.  
  45. }
  46. }

Program.cs

dotnet run 执行

执行到1 没有再往下执行

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

任务29:自己动手构建RequestDelegate管道的更多相关文章

  1. 【ASP.NET Core快速入门】(八)Middleware管道介绍、自己动手构建RequestDelegate管道

    中间件是汇集到以处理请求和响应的一个应用程序管道的软件. 每个组件: 可以选择是否要将请求传递到管道中的下一个组件. 之前和之后调用管道中的下一个组件,可以执行工作. 使用请求委托来生成请求管道. 请 ...

  2. 菜鸟入门【ASP.NET Core】8:Middleware管道介绍、自己动手构建RequestDelegate管道

    中间件:是汇集到以处理请求和响应的一个应用程序管道的软件. 每个组件: 可以选择是否要将请求传递到管道中的下一个组件. 之前和之后调用管道中的下一个组件,可以执行工作. 使用请求委托来生成请求管道.  ...

  3. 29-自己动手构建RequestDelegate管道

    1-使用vsCode新建个项目 2-新建RequestDelegate和Context public delegate Task RequestDelegate(Context context); p ...

  4. 构建RequestDelegate管道

    1. 创建 Context.cs using System; using System.Threading.Tasks; namespace MyPipeline { public class Con ...

  5. .net core 2.0学习记录(四):Middleware使用以及模拟构建Middleware(RequestDelegate)管道

    .net Core中没有继续沿用以前asp.net中的管道事件,而是开发了一个新的管道(Middleware): public class MiddlewareDemo { private reado ...

  6. 任务28:RequestDelegate管道实现思路

    任务28:RequestDelegate管道实现思路 管道的实现机制 RequestDelegate是管道的核心.ApplicationBuilder就是接收了很多个RequestDelegae把它拼 ...

  7. Kafka笔记7(构建数据管道)

    构建数据管道需要考虑的问题: 及时性  可靠性 高吞吐量和动态吞吐量   数据格式  转换    安全性   故障处理能力  耦合性与灵活性 数据管道的构建分为2个阵营,ETL和ELT ETL:提取- ...

  8. ASP.NET Core Middleware管道介绍

    public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.Use(async (context, ne ...

  9. ASP.NET Core快速入门_学习笔记汇总

    第2章 配置管理 任务12:Bind读取配置到C#实例 任务13:在Core Mvc中使用Options 任务14:配置的热更新 任务15:配置框架设计浅析 第3章 依赖注入 任务16:介绍- 任务1 ...

随机推荐

  1. Tips/Tricks in Deep Neural Networks

    转自: http://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.html

  2. sklearn 特征选择

    1.移除低方差的特征(Removing features with low variance) VarianceThreshold 是特征选择中的一项基本方法.它会移除所有方差不满足阈值的特征.默认设 ...

  3. Swift下调用Touch ID实现指纹识别

    iOS开发交流群:484884085 欢迎大家增加. 例如以下代码是实现调用5S以上设备指纹识别的代码,依照官网给出的代码,会出现识别成功后非常久才运行成功后调用的代码,逛了非常久的.才知道要将其放入 ...

  4. linux字符设备驱动程序框架(老方法)

    #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #inclu ...

  5. github 新建远程仓库 及 删除远程仓库

    一.新建远程仓库 1.点击 ' + ' 号 2.选择 ' new repository ' 3.填写信息  创建仓库 二.删除远程仓库 1.点击 ' Settings ' 按钮 2.滑动到最底部,点击 ...

  6. Js两种post方式(转)

    第一种提交post的方式是传统方式,判断浏览器进行post请求. <SCRIPT stype=text/javascript> var xmlobj; //定义XMLHttpRequest ...

  7. u-boot简单学习笔记(二)——AR9331 uboot.lds分析

    最开始系统上电后 从uboot.lds开始引导 OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", ...

  8. 12.怎样自学Struts2发送邮件和验证补充[视频]

    12.怎样自学Struts2发送邮件和验证补充[视频] 之前写了一篇"打算做一个视频教程探讨怎样自学计算机相关的技术",优酷上传不了,仅仅好传到百度云上: http://pan.b ...

  9. html-基本form元素---ShinePans

    <html> <meta http-equiv="content-type" content="text/html;charset=UTF-8" ...

  10. Spring Boot 动态数据源(多数据源自己主动切换)

    本文实现案例场景: 某系统除了须要从自己的主要数据库上读取和管理数据外.另一部分业务涉及到其它多个数据库,要求能够在不论什么方法上能够灵活指定详细要操作的数据库. 为了在开发中以最简单的方法使用,本文 ...