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

以Action为参数

     public void TestAction()
{
//Action参数
ExecuteFunction(() =>
{ });
ExecuteFunction(ActionAAA("para"));
ExecuteFunction(AAA); //Action<T>参数,T可以由类的泛型参数输入
ExecuteFunction<string>((string praa) =>
{ });
//Action<T>参数,T主动输入
ExecuteFunction<string>((string praa) =>
{ }, "aaa");
ExecuteFunction<string>(AAA, "para");
} private void ExecuteFunction(Action action)
{
action?.Invoke();
} private void ExecuteFunction<T>(Action<T> action)
{
return;
}
private void ExecuteFunction<T>(Action<T> action, T s)
{
action?.Invoke(s);
}

引用的方法

     void AAA()
{
}
void AAA(string para)
{
}
Action ActionAAA(string para)
{
return () =>
{
Console.WriteLine(para);
};
}

以Func为参数

     public async void TestFunc()
{
//Func<string>
ExecuteFunction(() =>
{
return string.Empty;
});
//Func<Task>
ExecuteFunction(async () => { });
ExecuteFunction(FuncTask);
//Func<T, Tout>
ExecuteFunction<string, int>(BBB, "para");
//Func<T, Task>
ExecuteFunction<string>(FuncTask, "para");
//Func<T, Task<Tout>>
var stringResult = await ExecuteFunction<string, string>(FuncWithResult<string, string>, "para");
} private string ExecuteFunction(Func<string> func)
{
return func.Invoke();
} private void ExecuteFunction(Func<Task> func)
{
func?.Invoke();
}
private Tout ExecuteFunction<T, Tout>(Func<T, Tout> func, T para)
{
return func.Invoke(para);
} private void ExecuteFunction<T>(Func<T, Task> function, T para)
{
function?.Invoke(para);
}
private async Task<Tout> ExecuteFunction<T, Tout>(Func<T, Task<Tout>> function, T para)
{
return await function?.Invoke(para);
}
     private int BBB(string obj)
{
return ;
}
private async Task<Tout> FuncWithResult<T, Tout>(T para)
{
await Task.Delay();
return default(Tout);
} async Task FuncTask<T>(T para)
{ }
async Task FuncTask()
{ }

其中,

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

以Task为参数

     private void TestTask()
{
ExecuteFunction(Task.Run(() =>
{ }));
ExecuteFunction(Task<string>.Run(async () =>
{
return string.Empty;
}));
} private void ExecuteFunction(Task task)
{
task.Start();
}
private void ExecuteFunction<Tout>(Task<Tout> task)
{
task.Start();
}

最新文章

  1. 387. First Unique Character in a String
  2. [Python学习] Linux环境下的Python配置,必备库的安装配置
  3. Ubuntu Mono 运行 Helloworld
  4. vijos p1002 dp ***
  5. 配置Git Extension免密码发布代码到CSDN
  6. 【Django】Apache上运行单个Django项目,mod_wsgi配置
  7. LeetCode Delete Node in a Linked List (删除链表中的元素)
  8. 距离矢量路由协议举例——RIP
  9. 介绍一个成功的 Git 分支模型 Release 分支
  10. 【转】15款Java程序员必备的开发工具
  11. Vxworks下的SATA提速
  12. 【Android Studio安装部署系列】十六、Android studio在layout目录下新建子目录
  13. Leetcode 4
  14. webservice之jax-ws实现方式
  15. 任务超时退出的方法 C#
  16. 证券化代币的时代已经到来,STO将引爆区块链经济
  17. FineReport中如何制作树数据集来实现组织树报表
  18. 利用proguard对java web工程代码混淆
  19. 【leetcode】59.Spiral Matrix II
  20. C# Programming Guide--&gt;Statements, Expressions, and Operators--&gt;Anonymous Functions

热门文章

  1. UWP中实现大爆炸效果(一)
  2. Shell 脚本中调用另一个 Shell 脚本的三种方式
  3. 【SAP业务模式】之STO(一):业务背景和前台操作
  4. MIP 组件库升级公告
  5. 性能测试入门 — LoadRunner 使用初探
  6. 流程控制之if判断
  7. 在Unity中实现小地图(Minimap)
  8. Java基础练习2(构造方法)
  9. Oracle数据库知识要点
  10. Nodejs实现用户注册