举个栗子:洗衣机洗衣服需要60分钟,而在60分钟里我可以洗澡,写代码;洗衣机洗好衣服后我去晾衣服 晾完后,我再接着继续写代码;
Task<T>
,T是真正的返回值,Task<int>
。惯例:异步方法名以 Async
结尾;Task
。await
调用,则这个方式也必须修饰为 async
awatit
调用,则这个方法也必须修饰为 async
using System; using System.IO; using System.Threading.Tasks; namespace 异步编程练习2 { class Program { static async Task Main(string[] args) //传染性 加async { string fileName = @"E:\1.txt"; File.Delete(fileName); await File.WriteAllTextAsync(fileName,"Hello"); //调用Async方法时,加await关键字 string s = await File.ReadAllTextAsync(fileName); //方法以 Asyns 结尾 Console.WriteLine(s); } } }
class Program { static async Task Main(string[] args) { await TasDownloadHtmlAsync("https://www.baidu.com", @"E:\1.txt"); Console.WriteLine("完成!"); } static async Task TasDownloadHtmlAsync(string url,string fileName) { using (HttpClient httpClient = new HttpClient()) { string html = await httpClient.GetStringAsync(url); await File.WriteAllTextAsync(fileName,html); } } }
using System; using System.IO; using System.Text; using System.Threading; using System.Threading.Tasks; namespace async和多线程的区别 { class Program { static void Main(string[] args) { Console.WriteLine(Thread.CurrentThread.ManagedThreadId); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 1000000; i++) { sb.Append("+++++++++++"); } File.WriteAllTextAsync(@"E:\test.txt",sb.ToString()); Console.WriteLine(Thread.CurrentThread.ManagedThreadId); } } }