用Task去包装EAP

 

包装EAP的话,我们需要用TaskCompletionSource包装器进行包装
aysc await 本质上也是一个包装器

可以下载网页中的数据

    class Program
    {
        static void Main(string[] args)
        {
            var task = GetTaskAsyc("http://cnblogs.com");
            var nums = task.Result;
            Console.WriteLine(nums);
            Console.Read();
        }

        public static Task<string> GetTaskAsyc(string url)
        {
            TaskCompletionSource<string> source = new TaskCompletionSource<string>(); 
            WebClient client = new WebClient();

            client.DownloadDataCompleted += (sender,e) =>
            {
                try
                {

                    byte[] msg = e.Result;
                  string d=  Encoding.UTF8.GetString(msg);
                    //如果下载完成了,将当前的bytep[]个数给task包装器
                    source.TrySetResult(d);
                }
                catch (Exception ex)
                {

                    source.TrySetException(ex);
                }
            };
            client.DownloadDataAsync(new Uri(url));
            return source.Task;
        }
    }
}

  

posted on 2020-08-17 22:22  yanfeifei  阅读(135)  评论(0)    收藏  举报

导航