Я пытаюсь иметь несколько задач, которые занимают объекты из параллельной коллекции, но только при наличии определенного ресурса.Task scheduling и WaitHandles
По причине сигнализации о наличии этого ресурса я использовал ManualResetEvent, и мое тело задачи выглядит следующим образом:
while(!_token.IsCancellationRequested)
{
operationsLock.WaitLock();
_token.ThrowIfCancellationRequested();
// dothings
}
Однако, я заметил, что с момента замок разблокирован к моменту, когда задачи будут перенесены, у меня может быть несколько сотен миллисекунд, где задачи могут быть перезапущены, а они нет, вероятно, потому, что они просто не запланированы.
Я начинаю задачи с TaskFactory, как я могу улучшить это поведение? Есть ли лучшая стратегия для приостановки задач, пока ресурс недоступен?