用Task去包裝EAP
阿新 • • 發佈:2020-08-18
包裝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; } } }