让我们假设我们有一个使用One Producing Task和3个Consumer Tasks创建的Producer-Consumer模式,如下所示:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("audio/*");
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(song.filename));
startActivity(Intent.createChooser(intent, "Share Song File:"));
问题是如何才能取消任务消费者[2]?所有消费者停止发送取消时!我希望能够在需要时取消单个消费者。
非常感谢
答案 0 :(得分:4)
如果您需要独立取消所有消费者,则需要单独的取消令牌 - 因此需要单独取消令牌来源。
var consumers =
Enumerable
.Range(0, 10)
.Select(_ => new CancellationTokenSource())
.Select(cts => new { Task = Task.Run(() => DoWork(cts.Token)),
TokenSource = cts })
.ToList();
这将为您提供List<T>
,其中每个元素都是任务及其对应的CancellationTokenSource
。因此,如果您想取消consumers[0].Task
,请拨打consumers[0].TokenSource.Cancel()
。