Я хочу реализовать класс или шаблон, который гарантирует, что я никогда не буду выполнять более одной задачи одновременно для определенного набора операций (HTTP-вызовы). Вызовы Заданий могут возникать из разных потоков в произвольные моменты времени. Я хочу использовать шаблон async-await, чтобы вызывающий мог обрабатывать исключения, завершая вызов в try-catch.
Вот иллюстрация предполагаемого потока выполнения:
Псевдокод от вызывающего:
try {
Task someTask = GetTask();
await SomeScheduler.ThrottledRun(someTask);
}
catch(Exception ex) {
// Handle exception
}
Класс Task
здесь может вместо этого быть классом Action
в зависимости от решения.
Обратите внимание, что когда я использую слово "Расписание" в этом вопросе, я не обязательно его использую в отношении .NET Task Scheduler. Я не очень хорошо знаю библиотеку асинхронного ожидания, чтобы знать, с какого угла и с какими инструментами подходит эта проблема. TaskScheduler может иметь значение здесь, и это может быть не так. Я прочитал документ TAP pattern и нашел шаблоны, которые почти решают эту проблему, но не совсем (глава о чередовании).