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, вызовет ли приведенный выше код какие-либо проблемы в определенных сценариях? Что еще более важно, приведенный выше код будет делать правильные вещи?

0 ответов

Другие вопросы по тегам