1. 程式人生 > 實用技巧 >用Task去包裝EAP

用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;
        }
    }
}