CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 122

122
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ

Blocking—dừng quá trình thực thi của tiểu trình hiện hành cho đến khi phương thức
thực thi bất đồng bộ kết thúc. Điều này rất giống với sự thực thi đồng bộ. Tuy nhiên,
nếu linh hoạt chọn thời điểm chính xác để đưa mã lệnh của bạn vào trạng thái dừng
(block) thì bạn vẫn còn cơ hội thực hiện thêm một số việc trước khi mã lệnh đi vào
trạng thái này.

Polling—lặp đi lặp lại việc kiểm tra trạng thái của phương thức thực thi bất đồng bộ để
xác định nó kết thúc hay chưa. Đây là một kỹ thuật rất đơn giản, nhưng nếu xet về măt
xư ly thi không đươc hiêu qua. Bạn nên tránh các vòng lặp chặt làm lãng phí thời gian
của bộ xử lý; tốt nhất là nên đặt tiểu trình thực hiện polling vào trạng thái nghỉ (sleep)
trong một khoảng thời gian bằng cách sử dụng

Thread.Sleep

giữa các lần kiểm tra

trạng thái. Bởi ky thuât polling đoi hoi bạn phai duy tri môt vong lăp nên hoạt đông cua
tiểu trình chơ se bi giới hạn, tuy nhiên bạn co thê dễ dàng câp nhât tiến đô công viêc.

Waiting—sử dụng một đối tượng dẫn xuất từ lớp

System.Threading.WaitHandle

để báo

hiệu khi phương thức thực thi bất đồng bộ kết thúc. Waiting là một cải tiến của kỹ thuật
polling, nó cho phép bạn chờ nhiều phương thức thực thi bất đồng bộ kết thúc. Bạn
cũng có thể chỉ định các giá trị time-out cho phép tiểu trình thực hiện waiting dừng lại
nếu phương thức thực thi bất đồng bộ đã diễn ra quá lâu, hoặc bạn muốn cập nhật định
kỳ bộ chỉ trạng thái.

Callbacks—Callback là một phương thức mà bộ thực thi sẽ gọi khi phương thức thực
thi bất đồng bộ kết thúc. Mã lệnh thực hiện lời gọi không cần thực hiện bất kỳ thao tác
kiểm tra nào, nhưng vẫn có thể tiếp tục thực hiện các công việc khác. Callback rất linh
hoạt nhưng cũng rất phức tạp, đặc biệt khi có nhiều phương thức thực thi bất đồng bộ
chạy đồng thời nhưng sử dụng cùng một callback. Trong những trường hợp như thế,
bạn phải sử dụng các đối tượng trạng thái thích hợp để so trùng các phương thức đã
hoàn tất với các phương thức đã khởi tạo.

Lớp

AsyncExecutionExample

trong ví dụ dưới đây mô tả cơ chế thực thi bất đồng bộ. Nó sử

dụng một ủy nhiệm có tên là

AsyncExampleDelegate

để thực thi bất đồng bộ một phương thức

có tên là

LongRunningMethod

. Phương thức

LongRunningMethod

sử dụng

Thread.Sleep

để mô

phỏng một phương thức có thời gian thực thi dài.

// Ủy nhiệm cho phép bạn thực hiện việc thực thi bất đồng bộ

// của AsyncExecutionExample.LongRunningMethod.

public delegate DateTime AsyncExampleDelegate(int delay, string name);

// Phương thức có thời gian thực thi dài.

public static DateTime LongRunningMethod(int delay, string name) {

Console.WriteLine("{0} : {1} example - thread starting.",

DateTime.Now.ToString("HH:mm:ss.ffff"), name);

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.