• C# 以函数Action/Func/Task作为方法参数


    以Action、Func、Task作为方法参数,mark一下

    以Action为参数

     1     public void TestAction()
     2     {
     3         //Action参数
     4         ExecuteFunction(() =>
     5         {
     6 
     7         });
     8         ExecuteFunction(ActionAAA("para"));
     9         ExecuteFunction(AAA);
    10 
    11         //Action<T>参数,T可以由类的泛型参数输入
    12         ExecuteFunction<string>((string praa) =>
    13         {
    14 
    15         });
    16         //Action<T>参数,T主动输入
    17         ExecuteFunction<string>((string praa) =>
    18         {
    19 
    20         }, "aaa");
    21         ExecuteFunction<string>(AAA, "para");
    22     }
    23 
    24     private void ExecuteFunction(Action action)
    25     {
    26         action?.Invoke();
    27     }
    28 
    29     private void ExecuteFunction<T>(Action<T> action)
    30     {
    31         return;
    32     }
    33     private void ExecuteFunction<T>(Action<T> action, T s)
    34     {
    35         action?.Invoke(s);
    36     }

    引用的方法

     1     void AAA()
     2     {
     3     }
     4     void AAA(string para)
     5     {
     6     }
     7     Action ActionAAA(string para)
     8     {
     9         return () =>
    10         {
    11             Console.WriteLine(para);
    12         };
    13     }
    View Code

    以Func为参数 

     1     public async void TestFunc()
     2     {
     3         //Func<string>
     4         ExecuteFunction(() =>
     5         {
     6             return string.Empty;
     7         });
     8         //Func<Task>
     9         ExecuteFunction(async () => { });
    10         ExecuteFunction(FuncTask);
    11         //Func<T, Tout>
    12         ExecuteFunction<string, int>(BBB, "para");
    13         //Func<T, Task>
    14         ExecuteFunction<string>(FuncTask, "para");
    15         //Func<T, Task<Tout>>
    16         var stringResult = await ExecuteFunction<string, string>(FuncWithResult<string, string>, "para");
    17     }
    18 
    19     private string ExecuteFunction(Func<string> func)
    20     {
    21         return func.Invoke();
    22     }
    23 
    24     private void ExecuteFunction(Func<Task> func)
    25     {
    26         func?.Invoke();
    27     }
    28     private Tout ExecuteFunction<T, Tout>(Func<T, Tout> func, T para)
    29     {
    30         return func.Invoke(para);
    31     }
    32 
    33     private void ExecuteFunction<T>(Func<T, Task> function, T para)
    34     {
    35         function?.Invoke(para);
    36     }
    37     private async Task<Tout> ExecuteFunction<T, Tout>(Func<T, Task<Tout>> function, T para)
    38     {
    39         return await function?.Invoke(para);
    40     }
     1     private int BBB(string obj)
     2     {
     3         return 1;
     4     }
     5     private async Task<Tout> FuncWithResult<T, Tout>(T para)
     6     {
     7         await Task.Delay(2);
     8         return default(Tout);
     9     }
    10 
    11     async Task FuncTask<T>(T para)
    12     {
    13 
    14     }
    15     async Task FuncTask()
    16     {
    17 
    18     }
    View Code

    其中,

        ExecuteFunction(async () =>
        {
        });
    输入async () =>{}后,Func<Task> func、Action action都是可以匹配的,优先使用的是Func<Task> func
     

    以Task为参数

     1     private void TestTask()
     2     {
     3         ExecuteFunction(Task.Run(() =>
     4         {
     5 
     6         }));
     7         ExecuteFunction(Task<string>.Run(async () =>
     8         {
     9             return string.Empty;
    10         }));
    11     }
    12 
    13     private void ExecuteFunction(Task task)
    14     {
    15         task.Start();
    16     }
    17     private void ExecuteFunction<Tout>(Task<Tout> task)
    18     {
    19         task.Start();
    20     }
  • 相关阅读:
    UIPickerView-一.01-
    闭包-01-Swift
    Swift 入门-01-概述
    git使用命令行-01-自己操作的
    FetchedResultsController-03-CoreData相关
    SQLite-05-增删改查
    Sqlite函数总结-04
    List<string>转xml
    比较两个List<T>是否相同
    获取DataTable前几条数据
  • 原文地址:https://www.cnblogs.com/kybs0/p/10766329.html
Copyright © 2020-2023  润新知