Bạn có thể tạo sự kiện (ví dụ: ManualResetEvent
) trong mỗi chuỗi và giữ nó trong danh sách được đồng bộ hóa (sử dụng cấu trúc lock
). Đặt sự kiện hoặc xóa sự kiện khỏi danh sách khi tác vụ hoàn tất.
Khi bạn muốn tham gia, bạn có thể sử dụng WaitHandle.WaitAll
(MSDN documentation) để chờ tất cả các sự kiện được báo hiệu.
Đó là một hack, nhưng tôi không thể thấy làm thế nào để giảm nó để bất cứ điều gì đơn giản!
Chỉnh sửa: ngoài ra, bạn có thể đảm bảo không có sự kiện mới nào được đăng, sau đó đợi một vài giây. Nếu họ thực sự sống ngắn, bạn sẽ không có vấn đề gì. Thậm chí đơn giản hơn, nhưng còn nhiều hơn nữa.
Cuối cùng, nếu chỉ là một khoảng thời gian ngắn, dịch vụ sẽ không thoát cho đến khi tất cả các chuỗi đã chết (trừ khi chúng là chủ đề nền); vì vậy nếu nó là một khoảng thời gian ngắn, người quản lý kiểm soát dịch vụ sẽ không bận tâm một giây hoặc lâu hơn - bạn chỉ có thể để chúng hết hạn - theo kinh nghiệm của tôi.
Nguồn
2010-08-06 18:43:04
Chúng phải ngắn ngủi, nhưng đối với trường hợp sử dụng của tôi, tôi cần đảm bảo nhiều hơn "nên hoạt động". Tôi đang nghĩ đến việc sử dụng bộ đếm luồng khóa liên động để theo dõi số lượng chủ đề trong hồ bơi và đợi số đó bằng 0. – recursive
Thực ra, tôi thích đề xuất đầu tiên của bạn tốt hơn bộ đếm. – recursive