Я ищу что-то вроде Semaphore
, но это разрешает после того, как все слоты выпущены.Асинхронно ждать появления n вещей
Что-то вроде этого:
use semaphore = new SemaphoreSlim(0,100)
anEvent.add(fun _ -> semaphore.Release(1) |> ignore);
async {
do! thingThatCausesAnEventToFire100Times()
//where 100 is the available slots instead of the timeout.
let! thingsHappened = semaphore.WaitAsync(100) |> Async.AwaitTask
thingsHappened |> should be True
}
О да, если вы знаете ответ в C#, это тоже хорошо: P – albertjan
семафоры и прочее могут возникнуть проблемы с асинхронным (разные потоки), чтобы в первую очередь я просто пошел простой замок/ref counter/manualresetevent – Carsten
@ Carsten Семафоры предназначены для асинхронного/многопоточного использования. Из msdn для 'SemaphoreSlim':« Представляет облегченную альтернативу Семафору, которая ограничивает количество __threads__, которые могут одновременно обращаться к ресурсу или пулу ресурсов ». – albertjan