gpt4 book ai didi

c# - 在数据流 block 中应用 CancellationToken

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:13 27 4
gpt4 key购买 nike

在我的生产者-消费者应用程序中。我有:

CancellationTokenSource cTokenSource = new CancellationTokenSource();
CancellationToken cToken = new CancellationToken();
cToken = cTokenSource.Token;

点击开始按钮,应用程序正在运行。

private async void Start_Click(object sender, RoutedEventArgs e)
{
var producer = Producer();
var consumer = Consumer();
await Task.WhenAll(producer, consumer);
}

在消费者中,我使用了 TPL。

async Task Consumer()
{
try
{
var executionDataflowBlockOptions = new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = 50,
CancellationToken = cToken
};
var consumerBlock = new ActionBlock<AppointmentReminder>(
remainder =>
{
// blah blah for long running processes and updating UI
var result = Run(reminder);
},
executionDataflowBlockOptions);

bufferBlock.LinkTo(
consumerBlock, new DataflowLinkOptions { PropagateCompletion = true });
await Task.Delay(500);
}

现在我有一个取消按钮,我想在单击它时停止 TPL 消费者任务。 如何?

private void Cancel_Click(object sender, RoutedEventArgs e)
{

最佳答案

.Net 中的取消是合作的。您创建一个 CancellationTokenSource 来处理取消,并使用 CancellationToken 接收取消通知。要取消 token ,只需调用 CancellationTokenSource.Cancel:

cTokenSource.Cancel();

顺便说一句,直接创建 CancellationToken 没有多大用处,因为它永远无法取消。您应该从 CancellationTokenSource 获取 token :

var cTokenSource = new CancellationTokenSource();
var cToken = cTokenSource.Token;

关于c# - 在数据流 block 中应用 CancellationToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26610009/

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