1) Cuộc gọi AsyncWaitHandle.WaitOne có thể chặn khách hàng hoặc chắc chắn sẽ chặn khách hàng ?.Chi tiết của AsyncWaitHandle.WaitOne
2) Sự khác nhau giữa WaitAll, WaitOne, WaitAny là gì?
1) Cuộc gọi AsyncWaitHandle.WaitOne có thể chặn khách hàng hoặc chắc chắn sẽ chặn khách hàng ?.Chi tiết của AsyncWaitHandle.WaitOne
2) Sự khác nhau giữa WaitAll, WaitOne, WaitAny là gì?
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.WaitHandle.WaitAll()
và 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
, Mutex
và Manual/AutoResetEvent
.
Xem thêm:Blocking Application Execution Using an AsyncWaitHandle (MSDN)
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.
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
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
Trước EndInvoke() chúng ta có cần gọi cho họ không? – user215675
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
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. –