ườ

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 getLengthTask = AccessTheWebAsync();

// 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 AccessTheWebAsync()

{

// TWO

HttpClient client = new HttpClient();

Task getStringTask =

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

• Runchạy bằng hàm Run

• Start  chạy bằng hàm Start

• StartNew  chạy bằng hàm StartNew

• ContinueWithChạy Chuỗi tác vụ

• Resultlấy kết qủa trả về

• Wait & WaitAllchờ 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