取消并重新启动任务

克里斯·赖特

我已经阅读了几篇关于此的文章,但我目前还不明智。我正在开发一个应用程序,该应用程序在窗体上有一个TabControl。当用户单击选项卡页时,我希望后台进程在UI线程上运行(因为该进程可能需要几分钟)。很好,但是如果用户选择其他选项卡,则我希望取消任何当前活动的任务,并引起注意以转到新的选项卡。

private void ParentTabControl_SelectedIndexChanged(object sender, EventArgs e)
    {
        Task testTask;
        CancellationTokenSource testSource = new CancellationTokenSource();
        CancellationToken testToken = testSource.Token;

        switch (ParentTabControl.SelectedIndex)
        {
            case 0:
                updateSummaryTab();
                break;
            case 1:
                testTask = Task.Run(() =>
                    {
                        updateTabOne();
                    }, testToken);
                break;
            case 2:
                updateTabTwo();
                break;
        }
    }

如果将testSource设置为cancel,则将不再可用(尽管我知道我将需要使用某种令牌)。以前,我为每个选项卡使用了不同的BackgroundWorker,并只是检查了它的IsBusy属性,但是我认为使用单个回收的Task可能是更好的选择。

usr

我遇到的问题是,当我使用CancellationToken取消任务时,新任务无法启动

为您开始的每一轮工作创建一个新的CTS(和CT)。您需要将最后一轮的CTS存储在字段中。然后,开始新工作是:

if(cts != null) cts.Cancel();
cts = new ...;
StartWork(cts.Token);

请注意,取消正在运行的任务是协作的,将令牌传递给Task.Run不会执行任何操作,因为它不会停止已在运行的任务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一种自取消并重新启动任务的模式

来自分类Dev

取消并重新启动某个例程(python脚本)

来自分类Dev

捕获单个任务中的异常并重新启动它们

来自分类Dev

重新启动ScheduledThreadPoolExecutor中的已取消任务

来自分类Dev

暂停并重新启动终端输出

来自分类Dev

捕获错误并重新启动if语句

来自分类Dev

中断并重新启动setTimeouts循环

来自分类Dev

终止并重新启动进程

来自分类Dev

服务崩溃并重新启动

来自分类Dev

暂停并重新启动终端输出

来自分类Dev

停止setInterval并重新启动

来自分类Dev

关闭并重新启动挂起

来自分类Dev

systemctl休眠并重新启动?

来自分类Dev

生成回溯并重新启动

来自分类Dev

在Windows 10上重新启动/注销后,从任务栏取消固定的项目将返回

来自分类Dev

重新编译并重新启动守护程序

来自分类Dev

启动多个线程并重新启动它们

来自分类Dev

启动多个线程并重新启动它们

来自分类Dev

如何重新启动任务进程?

来自分类Dev

Nodemon重新启动运行gulp任务

来自分类Dev

重新启动已完成的任务

来自分类Dev

Celery任务可以重新启动吗?

来自分类Dev

重新启动单个任务活动

来自分类Dev

如何重新启动任务栏?

来自分类Dev

禁用UpdateOrchestrator重新启动任务

来自分类Dev

停止并重新启动已经运行的线程

来自分类Dev

保存并重新启动已暂停的gdb会话

来自分类Dev

如何停止并重新启动动画gif

来自分类Dev

Spring Batch暂停并重新启动作业