シンプルなパイプラインのシミュレーション

シンプルなパイプラインのシミュレーション

使用してシステムを。
使用にSystem.Collectionsを。
使用してSystem.Collections.Genericを。
使用してSystem.Threading.Tasksを。
使用して 静的ConsolePipeline.Programを。
使用してSystem.Linqのを。

名前空間ConsolePipeline 
{ 
    パブリック クラスプログラム
    { 
        パブリック デリゲートタスクRequestDelegate(のHttpContextのHttpContext)。
        静的 ボイドメイン(文字列[]引数)
        { 
            ApplicationBuilderアプリ = 新しいApplicationBuilder()。
            app.Use(非同期(コンテキスト、NEXT)=> 
            { 
                Console.WriteLineをは(" 第一開始... " );
                 のawait 次に(); 
                Console.WriteLineを(" 第一の端... " ); 
            }); 
            app.Use (非同期(文脈、NEXT)=> 
            { 
                Console.WriteLineをは(" 第二の開始... " );
                 のawait 次に(); 
                Console.WriteLineを(" 第二の端... " ); 
            }); 
            VARの firstmiddleware =app.Build(); 
            firstmiddleware(新しいのHttpContext()); 
            Console.WriteLineを(" Hello Worldの!" ); 
        } 
    } 

    パブリック クラスのHttpContext {} 

    パブリック クラスApplicationBuilder 
    { 
        // 中间的委托、不是中间件
        パブリック 静的 読み取り専用のIList <のFunc <RequestDelegate、RequestDelegate >> _components = 新しいリスト<のFunc <RequestDelegate、RequestDelegate >> (); 

        // 原生利用
        公共 ApplicationBuilder使用(機能<RequestDelegate、RequestDelegate> ミドルウェア) 
        {
            _components.Add(ミドルウェア)。
            返す これを
        } 

        // 扩展使用
        公共 ApplicationBuilder使用(機能<のHttpContext、のFunc <タスク>タスク> ミドルウェア)
        { 
            リターン使用(次=> 
            { 
                戻りコンテキスト=> 
                { 
                    タスクSimpleNext() => 次の(コンテキスト);
                     戻りミドルウェア(コンテキスト、SimpleNext); 
                }; 
            }); 
        } 

        パブリックRequestDelegateビルド()
        { 
            RequestDelegateアプリ =次=>
            { 
                Console.WriteLineを(" 中间中间件... " )。
                返すTask.CompletedTaskを。
            }。

            foreachのVARの成分_components.Reverse())
            { 
                アプリ = 成分(APP)。
            } 
            戻りアプリ。
        } 
    } 
}

業績:

 

おすすめ

転載: www.cnblogs.com/1175429393wljblog/p/12302074.html