Задача:
Реализуйте асинхронный планировщик задач с приоритетами и возможностью отмены. Требования:
1. Есть очередь задач (`Func<CancellationToken, Task>`), каждая с целочисленным приоритетом (0 — самый высокий).
2. Задачи выполняются параллельно, но не более
N одновременно.3. Если приходит задача с более высоким приоритетом, и нет свободных слотов, она может вытеснить задачу с самым низким приоритетом.
4. Вытеснённая задача должна быть отменена (через `CancellationToken`), и её ресурсы — корректно освобождены.
5. Код должен быть потокобезопасным и устойчивым к гонкам.
Дополнительно:
- Используйте
PriorityQueue, SemaphoreSlim, CancellationTokenSource- Не допускайте deadlock’ов
- Обеспечьте корректное завершение планировщика по команде
StopAsync()Пример API:
public class PriorityTaskScheduler
{
public PriorityTaskScheduler(int maxParallelism);
public Task EnqueueAsync(Func<CancellationToken, Task> task, int priority);
public Task StopAsync();
}
@csharp_1001_notes