可以将方法前面声明为async表明这个方法有需要异步(分配线程)来执行,所以一定要有await,它表明了它这条语句是需要异步执行的。
using System; using System.Net; using System.Threading.Tasks; namespace Async { class Program { static void Main(string[] args) { Task<string> ss = DownLoadStr(); Console.WriteLine(1); Console.WriteLine(ss.Result.Substring(100,100)); Console.WriteLine(2); Console.ReadKey(); } async static Task<string> DownLoadStr() { Console.WriteLine("异步开始!"); WebClient wc = new WebClient(); //await表明下载网页是异步执行的,可以返回到Main中继续执行,同时它也在执行 string s = await wc.DownloadStringTaskAsync("http://www.chicai.group"); Console.WriteLine("完成异步方法"); return s; } } }
async的返回值必须是void、Task、Task<>类型的,string表示return(返回)的类型。
但是方法体返回的其实还是Task<T>,可以通过task的Result方法获取到方法中return的结果
获取结果时,如果异步方法没有完成,Main将会等待方法完成,知道获取到结果。