异步执行
static void Main(string[] args) { Console.WriteLine("-------主线程启动-------"); Task<int> task = GetStrLengthAsync(); Console.WriteLine("主线程继续执行"); Console.WriteLine("Task返回的值" + task.Result); Console.WriteLine("-------主线程结束-------"); Console.ReadKey(); } static async Task<int> GetStrLengthAsync() { Console.WriteLine("GetStrLengthAsync方法开始执行"); //此处返回的<string>中的字符串类型,而不是Task<string> string str = await GetString(); Console.WriteLine("GetStrLengthAsync方法执行结束"); return str.Length; } static Task<string> GetString() { //Console.WriteLine("GetString方法开始执行") return Task<string>.Run(() => { Thread.Sleep(2000); Console.WriteLine("GetString的返回值"); return "GetString的返回值"; }); }
异步与回调2中对比
异步
static void Main(string[] args) { for (int i = 0; i < 100; i++) { test(i); } Console.ReadKey(); } static private void test(int i) { Task<int> task = GetStrLengthAsync(i); } static async Task<int> GetStrLengthAsync(int i) { Console.WriteLine(i); string str = await GetString(i); Console.WriteLine($"结束{i}"); return str.Length; } static Task<string> GetString(int i) { //Console.WriteLine("GetString方法开始执行") return Task<string>.Run(() => { Thread.Sleep(10000); Console.WriteLine($"耗时操作{i}"); return "GetString的返回值"; }); }
回调
private delegate void AddHandler(int i); static void Main(string[] args) { for (int i = 0; i < 100; i++) { test2(i); } Console.ReadKey(); } static private void test2(int i) { AddHandler addHandler = new AddHandler(test3); addHandler.BeginInvoke(i,null,null); } static private void test3(int i) { Console.WriteLine(i); test4(i); Console.WriteLine($"结束{i}"); } static private void test4(int i) { Thread.Sleep(10000); Console.WriteLine($"耗时操作{i}"); }