暇之余,究多Task、async、await。
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp2 { class Program { static void Main(string[] args) { for (int i = 0; i < 5; i++) { Task.Run(() => Run2()); //类似于线程池,开启线程小于5 } for (int i = 0; i < 5; i++) { new Thread(Run1).Start();//开启5个线程 } Task<string> task = Task.Run( () => Thread.CurrentThread.ManagedThreadId + "" ); Console.WriteLine(task.Result);//task.Result 会等到task执行完毕执行 Console.WriteLine("-------主线程启动-------"); Task<int> task2 = GetStrLengthAsync(); Console.WriteLine("主线程继续执行"); Console.WriteLine("Task返回的值" + task2.Result); Console.WriteLine("-------主线程结束-------"); } static void Run1() { Console.WriteLine("Thread Id =" + Thread.CurrentThread.ManagedThreadId); } static void Run2() { Console.WriteLine("Task调用的Thread Id =" + Thread.CurrentThread.ManagedThreadId); } //async必须返回void Task Task<int> static async Task<int> GetStrLengthAsync() { Console.WriteLine("GetStrLengthAsync方法开始执行"); //await 必须用来修饰Task Task<TResult>,而且只能出现在async修饰的异步方法中。 //遇到await并未开启新线程,而是遇到GetString方法中的Task.Run()时才开启了新线程 string str = await GetString(); Console.WriteLine("GetStrLengthAsync方法结束执行"); return str.Length; } static Task<string> GetString() { Console.WriteLine("GetString方法开始执行"); return Task.Run(() => { Thread.Sleep(2000); return "GetString返回值"; }); } } }
原文地址:https://www.cnblogs.com/chenyishi/p/8333930.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。