在做大数据分析时,由於需要从几千万甚至几亿笔资料中做运算,应用程序就整个不能动,若中间机器有要做甚麽事,例如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();
}
}
<<: ReactFiber节点的更新入口:beginWork
>>: Site Cache(网站快取) 、Browser Cache(浏览器快取) 、Server Cache(主机端快取) 3 者有什麽分别?
9/13 的伴伴学影音记录,聊聊 缩址服务的 GA 欢迎交流 共笔: https://hackmd....
在我们稍稍脱离初学程序的阶段时,可能会开始使用许多框架工具,抑或是写WebApp时使用Servlet...
Hola,我是Charlie! 在Day08当中,我们完成了後端的JWT机制还有修改个人资料,在今天...
前言 [Day 24] LIFF ScanCode曾提过liff.scanCode()因技术问题,功...
首先感谢这个技术平台让我分享一些专业的东西,今天我会分享一些Microsoft exam certi...