Khái niệm đồng bộ và bất đồng bộ
Async method
BackgroundWorker
Task
17 trang |
Chia sẻ: Mr Hưng | Lượt xem: 776 | Lượt tải: 0
Nội dung tài liệu Lập trình Windows Phone - Module 3 – Bài 6: Lập trình đồng bộ và bất đồng bộ, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Lập trình Windows PhoneModule 3 – Bài 6: Lập trình đồng bộ và bất đồng bộGV Biên soạn: Trần Duy ThanhNội dungKhái niệm đồng bộ và bất đồng bộAsync methodBackgroundWorkerTaskKhái niệm đồng bộ và bất đồng bộSynchronous (đồng bộ)Asynchronous (bất đồng bộ)Khái niệm đồng bộ và bất đồng bộAsync methodAsync methodprivate async void startButton_Click(object sender, RoutedEventArgs e) { // ONE Task getLengthTask = AccessTheWebAsync(); // FOUR int contentLength = await getLengthTask; // SIX resultsTextBox.Text += String.Format("\r\nLength of the downloaded string: {0}.\r\n", contentLength); } Async methodasync Task AccessTheWebAsync() { // TWO HttpClient client = new HttpClient(); Task getStringTask = client.GetStringAsync(""); // THREE string urlContents = await getStringTask; // FIVE return urlContents.Length; }BackgroundWorkerBackgroundWorker là một lớp cho phép ta viết đa tiến trình để cập nhật giao diện ở thời gian thực, nằm trong thư viện System.ComponentModelBackgroundWorker bw = new BackgroundWorker();//hỗ trợ cho phép hủybw.WorkerSupportsCancellation = true;//hỗ trợ cho phép cập nhậtbw.WorkerReportsProgress = true;//sự kiện để kích hoạt băt đầu chạy BackgroundWorkerbw.DoWork += bw_DoWork;//Sự kiện để cập nhậtbw.ProgressChanged += bw_ProgressChanged;//sự kiện đánh dấu là đã xongbw.RunWorkerCompleted += bw_RunWorkerCompleted;BackgroundWorkerbw.RunWorkerAsync(); private void bw_DoWork(object sender, DoWorkEventArgs e) { bw.ReportProgress(i * 10); }private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e) {}private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { } TaskRunchạy bằng hàm RunStart chạy bằng hàm StartStartNew chạy bằng hàm StartNewContinueWithChạy Chuỗi tác vụResultlấy kết qủa trả vềWait & WaitAllchờ 1 tác vụ, nhiều tác vụRunpublic int Fib(int n){ if (n Fib(10));MessageBox.Show("Fib="+task.Result);Startint[] nums = { 2,19, 17, 21, 4, 13, 8, 12, 7, 3, 5 };var f0 = new Task(() => nums.Average());f0.Start();StartNewint n = 5;var task = Task.Factory.StartNew(() => Fib (n));ContinueWithvar t1 = new Task(DoOnFirst);var t2 = t1.ContinueWith(DoOnSecond);t1.Start();Wait & WaitAllvar task = Task.Factory.StartNew(() => { int n = 5; int s = 0; for (int i = 1; i Func1(6));var task2 = Task.Factory.StartNew(() => Func2()); Task.WaitAll(task1, task2);MessageBox.Show("x của task1="+task1.Result);Thảo luận
Các file đính kèm theo tài liệu này:
- wp_module3_bai6_asynchronous_programming_8742.pptx