取消Dispose方法中的任务

我有一个类可以产生可以无限期运行的各种任务。 处理此对象时,我想阻止这些任务运行。

这是正确的方法:

public class MyClass : IDisposable { // Stuff public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { queueCancellationTokenSource.Cancel(); feedCancellationTokenSource.Cancel(); } } } 

你走在正确的轨道上。 但是,我建议在从Dispose方法返回之前等待任务终止,以避免在处理对象后任务继续运行的竞争条件。 同时处理CancellationTokenSource

 public class MyClass : IDisposable { private readonly CancellationTokenSource feedCancellationTokenSource = new CancellationTokenSource(); private readonly Task feedTask; public MyClass() { feedTask = Task.Factory.StartNew(() => { while (!feedCancellationTokenSource.IsCancellationRequested) { // do finite work } }); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { feedCancellationTokenSource.Cancel(); feedTask.Wait(); feedCancellationTokenSource.Dispose(); feedTask.Dispose(); } } }