123
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
// Mô phỏng việc xử lý tốn nhiều thời gian.
Thread.Sleep(delay);
Console.WriteLine("{0} : {1} example - thread finishing.",
DateTime.Now.ToString("HH:mm:ss.ffff"), name);
// Trả về thời gian hoàn tất phương thức.
return DateTime.Now;
}
AsyncExecutionExample
chứa năm phương thức diễn đạt các cách tiếp cận khác nhau về việc
kết thúc phương thức thực thi bất đồng bộ. Dưới đây sẽ mô tả và cung cấp mã lệnh cho các
phương thức đó.
1.
Phương thức
BlockingExample
Phương thức
BlockingExample
thực thi bất đồng bộ phương thức
LongRunningMethod
và
tiếp tục thực hiện công việc của nó trong một khoảng thời gian. Khi xử lý xong công
việc này,
BlockingExample
chuyển sang trang thái dừng (block) cho đến khi phương
thức
LongRunningMethod
kết thúc. Để vào trạng thái dừng,
BlockingExample
thực thi
phương thức
EndInvoke
của thể hiện ủy nhiệm
AnsyncExampleDelegate
. Nếu phương
thức
LongRunningMethod
kết thúc,
EndInvoke
trả về ngay lập tức, nếu không,
BlockingExample
chuyển sang trạng thái dừng cho đến khi phương thức
LongRunningMethod
kết thúc.
public static void BlockingExample() {
Console.WriteLine(Environment.NewLine +
"*** Running Blocking Example ***");
// Gọi LongRunningMethod một cách bất đồng bộ. Truyền null cho
// cả ủy nhiệm callback và đối tượng trạng thái bất đồng bộ.
AsyncExampleDelegate longRunningMethod =
new AsyncExampleDelegate(LongRunningMethod);
IAsyncResult asyncResult = longRunningMethod.BeginInvoke(2000,
"Blocking", null, null);
// Thực hiện công việc khác cho đến khi
// sẵn sàng đi vào trạng thái dừng.
for (int count = 0; count < 3; count++) {
Console.WriteLine("{0} : Continue processing until " +
"ready to block...",