2009-11-29 49 views

Trả lời

21
  1. WaitHandle.WaitOne() là phương pháp thể hiện sẽ chặn cho đến khi xử lý chờ được báo hiệu (khi thao tác hoàn tất). Nếu nó đã được báo hiệu trước đây (tức là hoạt động đã hoàn thành), có thể cuộc gọi đến WaitOne() sẽ không bị chặn.
  2. WaitHandle.WaitAll()WaitHandle.WaitAny() là phương pháp tĩnh cho phép bạn chỉ định một số chờ xử lý để giám sát đồng thời:

    • WaitHandle.WaitAll() sẽ đợi cho đến khi tất cả của xử lý theo quy định đã được báo hiệu trước khi nó trả về.
    • WaitHandle.WaitAny() sẽ trả lại ngay sau bất kỳ số nào của các tay cầm được chỉ định đã được báo hiệu.

    Các phương pháp này cho phép bạn theo dõi một số hoạt động không đồng bộ xuất sắc cùng một lúc.

Bối cảnh:AsyncWaitHandle là tên của một tài sản trên giao diện IAsyncResult. Loại thực tế của thuộc tính này là WaitHandle, là lớp cơ sở trừu tượng cho các loại như Semaphore, MutexManual/AutoResetEvent.

Xem thêm:Blocking Application Execution Using an AsyncWaitHandle (MSDN)

+0

Trước EndInvoke() chúng ta có cần gọi cho họ không? – user215675

+0

Bạn nói đúng nhưng tôi nghĩ OP đã hỏi cụ thể về AsyncWaitHandle.WaitOne(). Vì vậy, tôi nghĩ rằng ông đã yêu cầu liệu cuộc gọi đến WaitOne sẽ luôn luôn chặn ngay cả khi op không đồng bộ đã hoàn thành, mà tất nhiên nó sẽ không – zebrabox

+0

Không. EndInvoke() có thể được gọi bất kỳ lúc nào sau BeginInvoke() và sẽ chặn nếu hoạt động vẫn chưa hoàn thành. –

2

Các phương pháp cho phép bạn đợi trên các sự kiện của cửa sổ. WaitOne không tĩnh và chờ xử lý sự kiện cho đối tượng đó. WaitAll và WaitAny là các phương thức toàn lớp tĩnh chờ một nhóm các trình xử lý sự kiện. WaitAll đợi tất cả các sự kiện để báo hiệu và WaitAny cho một sự kiện duy nhất trong nhóm.

+0

Không chắc chắn những gì bạn có ý nghĩa bởi 'chờ đợi trên cửa sổ sự kiện'. WaitOne chủ yếu được sử dụng để đồng bộ hóa các hoạt động không đồng bộ, tức là một luồng đồng bộ hóa với một luồng khác. OP đã hỏi về AsyncWaitHandle.WaitOne. AsyncWaitHandle là một WaitHandle thường được sử dụng để đồng bộ hóa một BeginInvoke tức là nó loại bỏ nhu cầu thăm dò ý kiến ​​và gọi IsCompleted trên IAsyncResult – zebrabox

+0

Nó cũng có thể được sử dụng cho các sự kiện windows (ví dụ CreateEvent) xem tài sản SafeWaitHandle và http://msdn.microsoft.com /en-us/library/microsoft.win32.safehandles.safewaithandle.safewaithandle.aspx. – kenny

Các vấn đề liên quan