Sementic "Утилита отменяет" на задачах C#
Я хотел иметь Task
Реализация, что всякий раз, когда это удаляется, связанная задача отменяется. Так что я имею в виду следующую наивную реализацию
public class AutoCancelTask : Task, IDisposable
{
public static AutoCancelTask Create(Action<CancellationToken> a)
{
return new AutoCancelTask(a, new CancellationTokenSource());
}
private CancellationTokenSource cts;
internal AutoCancelTask(Action<CancellationToken> a, CancellationTokenSource cts)
:base((() => a(cts.Token)))
{ this.cts = cts; }
void IDisposable.Dispose(){
cts.Cancel();
Dispose();
}
}
Для упрощения я рассматриваю только самые простые Task
конструктор. Добавление других конструкторов в любом случае не составит труда.
Меня беспокоит то, как реализуется интерфейс IDisposable. Поскольку Task также реализует IDisposable, вызовет ли приведенный выше код какие-либо проблемы в определенных сценариях? Что еще более важно, приведенный выше код будет делать правильные вещи?