ườ
Tr
ọ ự ng ĐH Khoa H c T Nhiên TP.HCM
TRUNG TÂM TIN H CỌ
ậ
ồ
ậ
ấ ồ
ộ
ộ
L p trình Windows Phone Module 3 – Bài 6: L p trình đ ng b và b t đ ng b
ạ
ầ
GV Biên so n: Tr n Duy Thanh
2014
Nội dung
• Khái niệm đồng bộ và bất đồng bộ
• Async method
• BackgroundWorker
• Task
2
Synchronous và Asynchronous Programming
Khái niệm đồng bộ và bất đồng bộ Synchronous (đồng bộ)
Asynchronous (bất đồng bộ)
3
Synchronous và Asynchronous Programming
Khái niệm đồng bộ và bất đồng bộ
4
Synchronous và Asynchronous Programming
Async method
5
Synchronous và Asynchronous Programming
Async method
private async void startButton_Click(object sender, RoutedEventArgs e)
{
// ONE
Task
// FOUR
int contentLength = await getLengthTask;
// SIX
resultsTextBox.Text +=
6
Synchronous và Asynchronous Programming
String.Format("\r\nLength of the downloaded string: {0}.\r\n", contentLength);
}
Async method
async Task
{
// TWO
HttpClient client = new HttpClient();
Task
client.GetStringAsync("http://msdn.microsoft.com");
// THREE
string urlContents = await getStringTask;
// FIVE
7
Synchronous và Asynchronous Programming
return urlContents.Length;
}
BackgroundWorker
thư
BackgroundWorker 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 viện trong nằm thực, System.ComponentModel
ỗ ợ
ỗ ợ
ự ệ ể ạ
ự ệ
8
ự ệ ấ Synchronous và Asynchronous Programming
BackgroundWorker bw = new BackgroundWorker(); ủ //h tr cho phép h y bw.WorkerSupportsCancellation = true; ậ ậ //h tr cho phép c p nh t bw.WorkerReportsProgress = true; ạ ầ //s ki n đ kích ho t băt đ u ch y BackgroundWorker bw.DoWork += bw_DoWork; ậ ể ậ //S ki n đ c p nh t bw.ProgressChanged += bw_ProgressChanged; //s ki n đánh d u là đã xong bw.RunWorkerCompleted += bw_RunWorkerCompleted;
BackgroundWorker
bw.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) {
9
Synchronous và Asynchronous Programming
…
}
Task
• Runchạy bằng hàm Run
• Start chạy bằng hàm Start
• StartNew chạy bằng hàm StartNew
• ContinueWithChạ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ụ
10
Synchronous và Asynchronous Programming
Run
public int Fib(int n){
if (n <= 2) return 1;
return Fib(n 2) + Fib(n 1);
}
var task = Task.Run(()=>Fib(10));
MessageBox.Show("Fib="+task.Result);
11
Synchronous và Asynchronous Programming
Start
int[] nums = { 2,19, 17, 21, 4, 13, 8, 12, 7, 3, 5 };
var f0 = new Task(() => nums.Average());
f0.Start();
12
Synchronous và Asynchronous Programming
StartNew
int n = 5;
var task = Task.Factory.StartNew(() => Fib (n));
13
Synchronous và Asynchronous Programming
ContinueWith
var t1 = new Task(DoOnFirst);
var t2 = t1.ContinueWith(DoOnSecond);
t1.Start();
14
Synchronous và Asynchronous Programming
Wait & WaitAll
var task = Task.Factory.StartNew(() => { int n = 5; int s = 0; for (int i = 1; i <= n; i++) s += i; return s; }); task.Wait(); MessageBox.Show("s="+task.Result);
15
Synchronous và Asynchronous Programming
Wait & WaitAll
public int Func1(int x) {return x * 2;} public void Func2() {…. }
ủ
var task1 = Task.Factory.StartNew(() => Func1(6)); var task2 = Task.Factory.StartNew(() => Func2()); Task.WaitAll(task1, task2); MessageBox.Show("x c a task1="
+task1.Result);
16
Synchronous và Asynchronous Programming
Thảo luận
17
Synchronous và Asynchronous Programming