126
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
// Đợi phương thức thực thi bất đồng bộ kết thúc.
// Time-out sau 300 mili-giây và hiển thị trạng thái ra
// cửa sổ Console trước khi tiếp tục đợi.
Console.WriteLine("{0} : Waiting until method is complete...",
DateTime.Now.ToString("HH:mm:ss.ffff"));
while(!asyncResult.AsyncWaitHandle.WaitOne(300, false)) {
Console.WriteLine("{0} : Wait timeout...",
DateTime.Now.ToString("HH:mm:ss.ffff"));
}
// Thu lấy kết quả của phương thức thực thi bất đồng bộ.
DateTime completion =
longRunningMethod.EndInvoke(asyncResult);
// Hiển thị thông tin kết thúc.
Console.WriteLine("{0} : Waiting example complete.",
completion.ToString("HH:mm:ss.ffff"));
}
4.
Phương thức
WaitAllExample
Phương thức
WaitAllExample
thực thi bất đồng bộ phương thức
LongRunningMethod
nhiều lần và sau đó sử dụng mảng các đối tượng
WaitHandle
để đợi cho đến khi tất cả
các phương thức kết thúc.
public static void WaitAllExample() {
Console.WriteLine(Environment.NewLine +
"*** Running WaitAll Example ***");
// Một ArrayList chứa các thể hiện IAsyncResult
// cho các phương thức thực thi bất đồng bộ.
ArrayList asyncResults = new ArrayList(3);
// Gọi ba lần 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ộ. Thêm thể hiện IAsyncResult
// cho mỗi phương thức vào ArrayList.
AsyncExampleDelegate longRunningMethod =