Tôi có dự án Visual Studio 2008 C# .NET 3.5 trong đó một lớp lắng nghe một lời gọi sự kiện từ một lớp khác được đa luồng. Tôi cần đảm bảo rằng sự kiện của tôi chỉ cho phép truy cập đồng thời tối đa 10 luồng. Chủ đề thứ 11 nên chặn cho đến khi một trong 10 kết thúc.Một chức năng chỉ cho phép N chủ đề đồng thời
myobj.SomeEvent += OnSomeEvent;
private void OnSomeEvent(object sender, MyEventArgs args)
{
// allow up to 10 threads simultaneous access. Block the 11th thread.
using (SomeThreadLock lock = new SomeThreadLock(10))
{
DoUsefulThings(args.foo);
}
}
Tôi không có quyền kiểm soát lớp khác MyObj
, vì vậy tôi không thể thực hiện một luồng ở đó.
Cách tốt nhất để thực hiện điều này là gì?
Cảm ơn, PaulH
1 để lưu ý rằng bạn nên thoát khỏi semaphore trong khối 'cuối cùng 'của try/catch. Đây là điều quan trọng - trong trường hợp mã của bạn ném một ngoại lệ, bạn muốn chắc chắn rằng semaphore được thoát. –