C# 以函数Action/Func/Task作为方法参数
以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()
{ }
其中,
{
以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();
}
C# 以函数Action/Func/Task作为方法参数的更多相关文章
- VS2012 Unit Test(Void, Action, Func) —— 对无返回值、使用Action或Func作为参数、多重载的方法进行单元测试
[提示] 1. 阅读文本前希望您具备如下知识:了解单元测试,了解Dynamic,熟悉泛型(协变与逆变)和Lambda,熟悉.NET Framework提供的 Action与Func委托.2.如果您对单 ...
- Delegate,Action,Func,匿名方法,匿名委托,事件
一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 public void HelloWorld ...
- Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)
Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...
- async 和 await 以及Action Func
C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: public class MyClass { public MyClass() { Displa ...
- 使用Unity拦截一个返回Task的方法
目标 主要是想为服务方法注入公用的异常处理代码,从而使得业务代码简洁.本人使用Unity.Interception主键来达到这个目标.由于希望默认就执行拦截,所以使用了虚方法拦截器.要实现拦截,需要实 ...
- .Net4.0如何实现.NET4.5中的Task.Run及Task.Delay方法
前言 .NET4.0下是没有Task.Run及Task.Delay方法的,而.NET4.5已经实现,对于还在使用.NET4.0的同学来说,如何在.NET4.0下实现这两个方法呢? 在.NET4.0下, ...
- Delegate,Action,Func,Predicate的使用与区别
C#4.0推出后,类似Linq,Lamda表达式等许多新的程序写法层次不穷.与之相关的Delegate,Action,Func,Predicate的使用和区别也常常让大家迷惑,此处就结合实际的应用,对 ...
- 委托delegate,Action,Func,Predicate
C#委托的介绍(delegate.Action.Func.predicate) 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 ...
- Task.Run()方法总结
一.从异步方法的声明说起 无返回值的类型异步方法 (1)public async Task MethodName() 带返回值类型的异步方法 (2)public async Task<TResu ...
随机推荐
- 实验吧——隐写术之复杂的QR_code
好久没有更新隐写术方面的题目了,对不起各位小可爱,今天我会多多更新几篇文章,来慰藉你们! 永远爱你们的 ---------新宝宝 1:复杂的QR_code 解题思路:保存图片之后使用在线解码工具,并没 ...
- 关于EffictiveC++笔记
我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」.
- 用Python学分析:集中与分散
散点图进阶,结合箱体图与直方图对数据形成全面的认识 描述数据集中趋势的分析量: 均值 - 全部数据的算术平均值 众数 - 一组数据中出现次数最多的变量值 中位数 - 一组数据经过顺序排列后处于中间位置 ...
- 【view绘制流程】理解
一.概述 View的绘制是从上往下一层层迭代下来的.DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下,依次measure ...
- 跟踪测试 DbContext ,向"不是真正的 ORM" 说拜拜
FreeSql 发展到现在,已经有两种稳定的开发模式,以下先简单带过一下.后面才是本文的主题. 方法一:基于 helper 的方式,祼用: dotnet add package FreeSql 提供 ...
- java_反射
反射:reflect 成员属性:Field 成员方法:Method 构造方法:Constructor 类:Class 引用,援引:invoke 新实例:newInstance Decla ...
- 45个值得收藏的 CSS 形状
摘要: CSS炫技. 原文:45个值得收藏的 CSS 形状 作者:前端小智 Fundebug经授权转载,版权归原作者所有. CSS能够生成各种形状.正方形和矩形很容易,因为它们是 web 的自然形状. ...
- Vue.js 学习笔记 第4章 v-bind 及 class与style绑定
本篇目录: 4.1 了解v-bind指令 4.2 绑定class的几种方式 4.3 绑定内联样式 DOM元素经常会动态地绑定一些class类名或style样式,本章将介绍使用v-bind指令来绑定cl ...
- Iconfont 在HTML中的使用
一.准备阶段: a.进入阿里巴巴矢量图标库www.iconfont.cn挑选所需的图标,加入购物车 b.点击网页中的购物车下载代码 二.3种方法实现 Iconfont 的HTML显示 Unicode ...
- SQL Server死锁中的会话隔离级别为序列化(Serializable)实验测试
最近在分析SQL Server的死锁时,发现一个比较有意思的现象,发现死锁当中一个会话的隔离级别为序列化(Serializable),这个是让人比较奇怪的地方,我们知道SQL Server数据库的默认 ...