C#新特性

2021-06-23 04:03

阅读:357

标签:new t   add   返回值   4.0   tostring   ber   出现   date   func   

4.0 VS2010 .Net 4.0

System.Threading.Tasks.Task

Task对象是.Net Framework 4.0之后出现的异步编程的一个重要对象。在一定程度上来说,Task对象可以理解Thread对象的一个升级产品。既然是升级产品,那它肯定有他的优势,比如我们上面Thread对象不能解决的问题:对于有返回值类型的委托。Task对象就能简单的解决。

//用法一
            Task task1 = new Task(new Action(MyAction));
//用法二
            Task task2 = new Task(delegate {  MyAction(); });
//用法三
            Task task3 = new Task(() => MyAction());
            Task task4 = new Task(() => { MyAction(); });
            task1.Start();
            task2.Start();
            task3.Start();
            task4.Start();

var strRes = Task.Run(() => { return GetReturnResult(); });//启动Task执行方法
Console.WriteLine("执行GetReturnResult方法后的时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
Console.WriteLine(strRes.Result);//得到方法的返回值

5.0 VS2012 .Net 4.5

async和await

在.Net 4.5中,通过async和await两个关键字,引入了一种新的基于任务的异步编程模型(TAP)。在这种方式下,可以通过类似同步方式编写异步代码,极大简化了异步编程模型。

static async Task TestAsync()
{
      Console.WriteLine("调用GetReturnResult()之前,线程ID:{0}。当前时间:{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
      var name = GetReturnResult();
      Console.WriteLine("调用GetReturnResult()之后,线程ID:{0}。当前时间:{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
      Console.WriteLine("得到GetReturnResult()方法的结果:{0}。当前时间:{1}", await name, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
}

await name 等价于 name.GetAwaiter().GetResult()

 

在lambdas中使用循环变量

在C#之前的版本中,如果你编写了一个循环,你不能在lambda中使用循环变量。事实上,它比想象中更糟。你可以在lambda中使用循环变量,但是它将给你一个错误的结果。它会使用循环退出时的变量值,不是被捕获时的值。

public static Listint, int>> GetAdders(params int[] addends) {
  var funcs = new Listint, int>>();
  foreach (int addend in addends) {
    funcs.Add(i => i + addend);
  }
  return funcs;
}

C#新特性

标签:new t   add   返回值   4.0   tostring   ber   出现   date   func   

原文地址:https://www.cnblogs.com/xyphoenix/p/10203441.html


评论


亲,登录后才可以留言!