gpt4 book ai didi

c# - 使用 CancellationToken 仅取消一项任务

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:04 24 4
gpt4 key购买 nike

假设我们有一个生产者-消费者模式,其中包含一个生产任务和 3 个消费者任务,如下所示:

        Task[] Consumer = new Task[10];
for (int i = 0; i < 3; i++)
{

Consumer[i] = Task.Run(() => DoWork(CancellationToken ct));
}

问题是我怎样才能只取消 Task Consumer[2]?当发送取消 token 时,所有消费者都会停止!如果需要,我希望能够取消单个消费者。

非常感谢

最佳答案

如果您需要单独取消所有消费者,则需要单独的取消 token - 从而单独的取消 token 源。

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() .

关于c# - 使用 CancellationToken 仅取消一项任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35663576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com