c#

来源:互联网 发布:js 从数据库导出excel 编辑:程序博客网 时间:2024/06/01 11:12

异步方法A(GetStringAsync())如何调用:

a. 编写一个异步方法B(DownLoadAsync()),在其中调用你需要调用的异步方法A(GetStringAsync());使用await等待其返回你需要的结果(此处阻塞); 在await之后,执行“得到异步方法A(GetStringAsync())的执行结果”之后的操作(相当于执行回调函数)。

b. 在主线程(Main())调用异步方法B(DownLoadAsync()),不用await,所以不会阻塞;在后面继续该干嘛干嘛。

using System;using System.Net.Http;using System.Threading;namespace AsyncTest2{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("Start downloading...");            string url = @"http://www.baidu.com";            // b.            DownLoadAsync(url);            // 上面不会阻塞;这儿的代码会继续执行            while (true)            {                Console.WriteLine("Working on other stuff...");                Thread.Sleep(1000);            }        }        public static async void DownLoadAsync(string url)        {            string content = string.Empty;            using (HttpClient client = new HttpClient())            {                // 此处阻塞,事实上是直接返回了Main函数;等待GetStringAsync()完成之后,直接执行await这一行之后的内容,结束之后会再次返回Main函数。                content = await client.GetStringAsync(url);            }            // a. 此处相当于回调函数            Console.WriteLine("End downloading...");            Console.WriteLine(content);        }    }}

原创粉丝点击