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

487

Chương 12: Dịch vụ Web XML và Remoting

Với đoạn mã trên, lớp proxy tương ứng sẽ gồm ba phương thức:

Wait

,

BeginWait

EndWait

.

Phương thức

Wait

gọi phương thức web một cách đồng bộ. Phương thức

BeginWait

khởi chạy

phương thức web trong một tiểu trình riêng và trả về ngay lập tức. Phương thức

BeginXXX

luôn

nhận nhiều hơn phương thức gốc hai đối số và trả về một đối tượng

IAsyncState

. Hai đối số

này được sử dụng để nhập thông tin trạng thái và một callback. Đối tượng

IAsyncState

cho

phép bạn xác định khi nào lời gọi kết thúc. Ví dụ, bạn có thể định kỳ kiểm tra thuộc tính

IAsyncState.IsComplete

để xác định lời gọi phương thức đã hoàn tất chưa. Khi nó đã hoàn

tất, bạn nhập đối tượng

IAsyncState

vào phương thức

EndWait

để nhận giá trị trả về từ

phương thức web. Nếu bạn gọi

EndWait

trước khi phương thức web hoàn tất, mã lệnh của bạn

sẽ đợi cho đến khi nó hoàn tất.
Có hai mẫu bất đồng bộ phổ biến dùng cho dịch vụ Web XML. Cách thứ nhất là gọi vài
phương thức bất đồng bộ một lượt, rồi đợi chúng hoàn tất. Cách này cho phép bạn giảm thời
gian đợi tổng cộng, và nó làm việc tốt nhất với đối tượng

System.Threading.WaitHandle

. Ví

dụ dưới đây gọi phương thức

Wait

ba lần:

using System;

using System.Threading;

public class WaitClient {

[MTAThread]

private static void Main() {

localhost.WaitService proxy = new localhost.WaitService();

DateTime startDate = DateTime.Now;

// Gọi ba phương thức một cách bất đồng bộ.

IAsyncResult handle1 = proxy.BeginWait(null, null);

IAsyncResult handle2 = proxy.BeginWait(null, null);

IAsyncResult handle3 = proxy.BeginWait(null, null);

WaitHandle[] waitHandle = {handle1.AsyncWaitHandle,

handle2.AsyncWaitHandle, handle3.AsyncWaitHandle};

// Đợi cho cả ba phương thức hoàn tất.

WaitHandle.WaitAll(waitHandle);

int totalDelay = proxy.EndWait(handle1) +

proxy.EndWait(handle2) + proxy.EndWait(handle3);

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.