本文来源于,转载请注明出处
代码示例
// 要让一个方法成为异步方法: // - async修饰符. // - 返回类型是 Task 或者 Task. 具体来说,如果函数没有return具体的值,则返回类型是Task,否则是Task // 这里 AccessTheWebAsync返回了整数,所以它的返回类型是Task // - 方法名后缀 "Async",显然这是一个约定async Task AccessTheWebAsync() { HttpClient client = new HttpClient(); // GetStringAsync 返回Task . 这意味着如果你await该task,你将获利一个string Task getStringTask = client.GetStringAsync("http://msdn.microsoft.com"); // 这里可以做一些不依赖getStringTask返回值的工作 DoIndependentWork(); // await会挂起AccessTheWebAsync的执行线程,getStringTask执行完毕,AccessTheWebAsync 才能继续执行 string urlContents = await getStringTask; // 等待 AccessTheWebAsync 的方法会获取一个长度值 return urlContents.Length; }
这段代码来自,可以看到作为异步方法的AccessTheWebAsync也调用了异步方法GetStringAsync。
另外要注意:对异步的方法await调用只能在异步方法中,比如下边的代码在编译期间就会报错class Program { static void Main(string[] args) { var t = AccessTheWebAsync(); string ret=await t; } async static TaskAccessTheWebAsync() { HttpClient client = new HttpClient(); Task getStringTask = client.GetStringAsync("http://msdn.microsoft.com"); string urlContents = await getStringTask; System.Console.WriteLine("Caller done"); return urlContents; } }
正确的调用方式如下
static void Main(string[] args){ var t = AccessTheWebAsync(); t.Wait(); string r=t.Result;}
本文来源于,转载请注明出处