zoukankan      html  css  js  c++  java
  • 构建RequestDelegate管道

    1. 创建 Context.cs

    using System;
    using System.Threading.Tasks;
    
    namespace MyPipeline
    {
       public class Context{
           
       }
    }

    2. 创建 RequestDelegate.cs

    using System;
    using System.Threading.Tasks;
    
    namespace MyPipeline
    {
       public delegate Task RequestDelegate(Context context);
    }

    3. 具体实现

    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 =>  {
                        System.Console.WriteLine("1"); 
                    return  next.Invoke(context); 
                    }; 
                }); 
    
                Use(next =>  {
                    return context =>  {
                        System.Console.WriteLine("2"); 
                    return  next.Invoke(context); 
                    }; 
                }); 
    
    
                RequestDelegate end = (context) =>  {
                            System.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); 
            }
        }
    }

    4. 运行结果

    1
    2
    end ...
  • 相关阅读:
    1442. Count Triplets That Can Form Two Arrays of Equal XOR
    1441. Build an Array With Stack Operations
    312. Burst Balloons
    367. Valid Perfect Square
    307. Range Sum Query
    1232. Check If It Is a Straight Line
    993. Cousins in Binary Tree
    1436. Destination City
    476. Number Complement
    383. Ransom Note
  • 原文地址:https://www.cnblogs.com/sunxuchu/p/9247141.html
Copyright © 2011-2022 走看看