142
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
7.
7.
Nh n bi t khi nào m t ti u trình k t thúc
ậ
ế
ộ ể
ế
Nh n bi t khi nào m t ti u trình k t thúc
ậ
ế
ộ ể
ế
Bạn muốn biết khi nào một tiểu trình đã kết thúc.
Sử dụng thuộc tính
IsAlive
hay phương thức
Join
của lớp
Thread
.
Cách dễ nhất để kiểm tra một tiểu trình đã kết thúc hay chưa là kiểm tra thuộc tính
Thread.IsAlive
. Thuộc tính này trả về
true
nếu tiểu trình đã được khởi chạy nhưng chưa kết
thúc hay bị hủy.
Thông thường, bạn sẽ cần một tiểu trình để đợi một tiểu trình khác hoàn tất việc xử lý của nó.
Thay vì kiểm tra thuộc tính
IsAlive
trong một vòng lặp, bạn có thể sử dụng phương thức
Thread.Join
. Phương thức này khiến tiểu trình đang gọi dừng lại (block) cho đến khi tiểu
trình được tham chiếu kết thúc. Bạn có thể tùy chọn chỉ định một khoảng thời gian (giá trị
int
hay
TimeSpan
) mà sau khoảng thời gian này,
Join
sẽ hết hiệu lực và quá trình thực thi của tiểu
trình đang gọi sẽ phục hồi lại. Nếu bạn chỉ định một giá trị time-out,
Join
trả về
true
nếu tiểu
trình đã kết thúc, và
false
nếu
Join
đã hết hiệu lực.
Ví dụ dưới đây thực thi một tiểu trình thứ hai và rồi gọi
Join
để đợi tiểu trình thứ hai kết thúc.
Vì tiểu trình thứ hai mất 5 giây để thực thi, nhưng phương thức
Join
chỉ định giá trị time-out
là 3 giây, nên
Join
sẽ luôn hết hiệu lực và ví dụ này sẽ hiển thị một thông báo ra cửa sổ
Console.
using System;
using System.Threading;
public class ThreadFinishExample {
private static void DisplayMessage() {
// Hiển thị một thông báo ra cửa sổ Console 5 lần.
for (int count = 0; count < 5; count++) {
Console.WriteLine("{0} : Second thread",
DateTime.Now.ToString("HH:mm:ss.ffff"));
// Nghỉ 1 giây.
Thread.Sleep(1000);
}
}