128
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
DateTime time = longRunningMethod.EndInvoke(result);
if ( time > completion) completion = time;
}
// Hiển thị thông tin kết thúc.
Console.WriteLine("{0} : WaitAll example complete.",
completion.ToString("HH:mm:ss.ffff"));
}
5.
Phương thức
CallbackExample
Phương thức
CallbackExample
thực thi bất đồng bộ phương thức
LongRunningMethod
và
truyền một thể hiện ủy nhiệm
AsyncCallback
(tham chiếu đến phương thức
CallbackHandler
) cho phương thức
BeginInvoke
. Phương thức
CallbackHandler
sẽ
được gọi một cách tự động khi phương thức
LongRunningMethod
kết thúc, kết quả là
phương thức
CallbackExample
vẫn tiếp tục thực hiện công việc.
public static void CallbackExample() {
Console.WriteLine(Environment.NewLine +
"*** Running Callback Example ***");
// Gọi LongRunningMethod một cách bất đồng bộ. Truyền một
// thể hiện ủy nhiệm AsyncCallback tham chiếu đến
// phương thức CallbackHandler. CallbackHandler sẽ
// tự động được gọi khi phương thức thực thi bất đồng bộ
// kết thúc. Truyền một tham chiếu đến thể hiện ủy nhiệm
// AsyncExampleDelegate như một trạng thái bất đồng bộ;
// nếu không, phương thức callback không thể truy xuất
// thể hiện ủy nhiệm để gọi EndInvoke.
AsyncExampleDelegate longRunningMethod =
new AsyncExampleDelegate(LongRunningMethod);
IAsyncResult asyncResult = longRunningMethod.BeginInvoke(2000,
"Callback", new AsyncCallback(CallbackHandler),
longRunningMethod);
// Tiếp tục với công việc khác.
for (int count = 0; count < 15; count++) {