C# Task中的Func, Action, Async与Await的使用
2021-05-01 12:28
标签:版本 class 同步方法 alt thread 结构 内部使用 ble ges 在说Asnc和Await之前,先说明一下Func和Action委托, Task任务的基础的用法 Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能。 Action Func Func 1。Func 分别说一下各个参数的意义,TResult表示 以下是使用示例: 但是如果我们需要所封装的方法不返回值,增么办呢?就使用Action! 可以使用 使用方法和Func类似! Action:既没有返回,也没有参数,使用方式如下: MSDN:http://msdn.microsoft.com/zh-cn/library/bb548654(VS.95).aspx 使用Func Func 使用 Async 和 Await 的异步编程(msdn的好文章) : https://msdn.microsoft.com/zh-cn/library/hh191443(v=vs.120) Task基本使用: C# 线程知识--使用Task执行异步操作 Task和await结合返回值见: .NET(C#):await返回Task的async方法 Task深入了解见: C# Task的使用 总结: Task提供一种新的类似多线程的多任务的用法, 达到使用线程的效果,但具体怎么分配线程由.net底层控制,这样性能好,效率也高,我们只需要专注业务逻辑, 同时具备以前线程不具备的返回值的功能(可以通过回调事件来处理),而在Task中只是简单的使用await来使用, await的task相当于同步的调用task, 同时会有返回值,只是在书写方面需要注意async, task,func, action等等关键字的使用,新手可能很困惑, 下面的例子就是一个简单的task使用例子,新手注意注释!!! 执行结果如下: 这个是.NET 4.5的特性,所以要求最低.NET版本为4.5。 看很多朋友还是使用的Thread来使用异步多线程操作,基本上看不见有使用Async、Await进行异步编程的。各有所爱吧,其实都可以。只要正确使用就行,不过还是写了这篇文章推荐大家使用Async、Await。 原因就是:可以跟写同步方法一样去异步编程。代码则就非常的清晰,就跟写普通的代码一样,不用关系如何去异步编程,也让很多初级程序员也能够异步编程了。下面是一个使用Thread 多线程实现的异步例子,以及一个使用Async与Await的异步例子,接下来我们再简单理解下Async与Await的相关技术说明。 以上代码运行效果如下图 运行效果: 显而易见我们就跟写同步方法一样,完成了异步方法的编写,代码更清晰了。 只有拥有async才能在其内部使用await关键字。异步方法可以具有Task、Task或void的返回类型; await关键字则是用于返回值是“可等待”类型(awaitable)的方法 来源:http://www.cnblogs.com/ZengYunChun/p/5937666.html C# Task中的Func, Action, Async与Await的使用 标签:版本 class 同步方法 alt thread 结构 内部使用 ble ges 原文地址:http://www.cnblogs.com/jia125go/p/7783150.html1. Func
Action,则既没有返回也没有参数,
的表现形式分为以下几种:
2。Func
3。Func
4。Func
5。Func
委托所返回值 所代表的类型, T,T1,T2,T3,T4表示委托所调用的方法的参数类型, 1 Func
MSDN:http://msdn.microsoft.com/zh-cn/library/bb534303(VS.95).aspx2. Action
Action1 Action action = null;//定义action
2
3 action = CheckIsVoid;//封装方法,只需要方法的名字
4
5 action();//调用
总结:
3. Task
1 static void Main(string[] args)
2 {
3 //异步方法, 当中使用await可以执行task异步任务,否则当作同步执行
4 test();
5 //其次输出,因为异步进入task任务了,就同步执行当前线程下面的代码
6 log("Main:调用test后");
7 Thread.Sleep(Timeout.Infinite);
8 }
9
10 //Main方法不允许加async,所以我们用这个方法使用await
11 static async void test()
12 {
13 //最先输出,还没有进入task
14 log("test: await之前");
15 // await后的内容会被加在目标doo的Task的后面,然后test马上返回,而doo则是进入了另一个任务执行了
16 log("doo的Task的结果: " + await doo());
17 // 会等到上面await执行的任务完成后才会执行当前代码
18 log("test: await之后");
19 }
20 //返回Task的async方法, 一个标准的带返回值的异步task任务方法
21 static async Task
4. Async、Await
Thread多线程异步编程例子
class Program
{
static void Main(string[] args)
{
Console.WriteLine("主线程测试开始..");
Thread th = new Thread(ThMethod);
th.Start();
Thread.Sleep(1000);
Console.WriteLine("主线程测试结束..");
Console.ReadLine();
}
static void ThMethod()
{
Console.WriteLine("异步执行开始");
for (int i = 0; i
使用Async与Await进行异步编程
1 static void Main(string[] args)
2 {
3 Console.WriteLine("主线程测试开始..");
4 AsyncMethod();
5 Thread.Sleep(1000);
6 Console.WriteLine("主线程测试结束..");
7 Console.ReadLine();
8 }
9
10 static async void AsyncMethod()
11 {
12 Console.WriteLine("开始异步代码");
13 var result = await MyMethod();
14 Console.WriteLine("异步代码执行完毕" + result.ToString());
15 }
16
17 static async Task
文章标题:C# Task中的Func, Action, Async与Await的使用
文章链接:http://soscw.com/index.php/essay/80865.html