[开发经验分享]如何中断执行中的 Task(任务)

情境

在做大数据分析时,由于需要从几千万甚至几亿笔资料中做运算,应用程式就整个不能动,若中间机器有要做甚么事,例如Windows要更新或者要变更甚么设定,就只能癡癡地等它跑完,或者直接关闭应用程式,但是分析状态还是在执行中,但实际上已中断了,所以需要相应的处理,也就是把状态修改为暂停中,必须新增一个暂停功能,所以在这边分享一个简单的,也实作成功的方法。

说明

主要是基于向CancellationTokenSource这个物件抛送Cancel的讯息,然后Task接收到之后,去执行执行绪的中断。

程式码

private CancellationTokenSource cts;private async void btnAnalysis_Click(object sender, EventArgs e){    cts = new CancellationTokenSource();    string projectNo = "";    try    {        await Task.Run(() =>        {            try            {//注册执行续中断事件                using (cts.Token.Register(Thread.CurrentThread.Abort))                {                    //执行大量运算                }            }            catch (ThreadAbortException)            {                //接收到执行绪中断例外状况//修改专案状态为暂停中,并跳出讯息                service.Pause(projectNo);                MessageBox.Show("已暂停");            }        }, cts.Token);    }    catch (ThreadAbortException)    {        //这边还是会抛送执行绪中断例外,忽略即可    }}//取消按钮private void btnCancel_Click(object sender, EventArgs e){    if (cts != null && !cts.IsCancellationRequested)    {        cts.Cancel();    }}

参考来源

https://stackoverflow.com/questions/4359910/how-to-abort-a-task-like-aborting-a-thread-thread-abort-method


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章