125
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
// thì đi vào trạng thái chờ trong 300 mini-giây
// trước khi thực hiện polling lần nữa.
Console.WriteLine("{0} : Poll repeatedly until method is " +
"complete...", DateTime.Now.ToString("HH:mm:ss.ffff"));
while(!asyncResult.IsCompleted) {
Console.WriteLine("{0} : Polling...",
DateTime.Now.ToString("HH:mm:ss.ffff"));
Thread.Sleep(300);
}
// 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} : Polling example complete.",
completion.ToString("HH:mm:ss.ffff"));
}
3.
Phương thức
WaitingExample
Phương thức
WaitingExample
thực thi bất đồng bộ phương thức
LongRunningExample
và
sau đó chờ cho đến khi
LongRunningMethod
kết thúc.
WaitingExample
sử dụng thuộc
tính
AsyncWaitHandle
của thể hiện
IAsyncResult
(được trả về bởi
BeginInvoke
) để có
được một
WaitHandle
và sau đó gọi phương thức
WaitOne
của
WaitHandle
. Việc sử dụng
giá trị time-out cho phép
WaitingExample
dừng quá trình đợi để thực hiện công việc
khác hoặc dừng hoàn toàn nếu phương thức thực thi bất đồng bộ diễn ra quá lâu.
public static void WaitingExample() {
Console.WriteLine(Environment.NewLine +
"*** Running Waiting 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,
"Waiting", null, null);