114网址导航 上传我的文档
下载
收藏
毕业于医学院校,在医院工作,有相对丰富的护理经验
下载此文档
正在努力加载中...
事件与中断的区别
下载积分:1500
内容提示:事件与中断的区别
文档格式:DOC|
浏览次数:1|
上传日期: 03:30:25|
文档星级:
该用户还上传了这些文档
事件与中断的区别
官方公共微信最近刚装上了vs2012,发现新增加Task任务,很不错,应该是Thread有一定的优势,特别是UI相关的多线程方面,可以很方便实现,不让界面死锁掉。但在中断时遇到问题:为什么取消的Task实际偷偷的还在继续运行呢?&首先如何中断,我们会使用到CancellationTokenSource这个,很容易做到。 1 static void Main(string[] args) 2
catch (OperationCanceledException) 8
Console.WriteLine("OperationCanceledException:操作取消了.");10
Thread.Sleep(1000 * 300);//等待结束。14
static async void Run()20
Console.WriteLine("Run2开始.");22
//主要的任务23
Task tw = new Task(() =&24
//这是可以中断或取消任务的27
CancellationTokenSource tokenSource = new CancellationTokenSource();28
var token = tokenSource.T29 30 31
//这个是实际想完成的任务32
Task t1 = Task.Factory.StartNew(() =&33
//异步执行35
Task.Factory.StartNew(() =&36
TaskTest1();38
while (true)42
//检测到取消了44
if (token.IsCancellationRequested)45
Console.WriteLine("强***消了");47
token.ThrowIfCancellationRequested();//强***消 并不会让TaskTest1停止执行48
Thread.Sleep(10);50
}, token);55 56
if (!t1.Wait(1000 * 5, tokenSource.Token))//这里设置了一个超时的时间秒数57
tokenSource.Cancel();//取消任务59
Console.WriteLine("超时,取消任务");60
tw.Start();//任务开始了65 //用这个,不会阻塞界面66
Console.WriteLine("Run2结束.");67
static void TaskTest1()70
Console.WriteLine("TaskTest1 开始.");72
Thread.Sleep(1000 * 20);73
Console.WriteLine("TaskTest1 完成.");74
}输出:1 Run2开始.2 TaskTest1 开始.3 超时,取消任务4 Run2结束.5 强***消了6 TaskTest1 完成.取消了,但并代表任务中代码不执行下去了,从结果中发现,TaskTest1还在继续扩行,并且在20秒后,输出&TaskTest1 完成&。Task有取消实际上是一个很简单取消,是一个状态的传入,需我们自己去取消任务,也就是TaskTest1中比如是读数据库,或是其它什么占用时间较长的,还有什么方法来取消呢?欢迎大家一起交流!Task是个很不错的,和async 、 await 可以很方便在UI下实现,不锁界面的,程序自己在后台执行。关于中断处理的系列问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
关于中断处理的系列问题
上传于||暂无简介
大小:5.18KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢您的举报已经提交成功,我们将尽快处理,谢谢!
编写中断向量表就属于BIOS的一部分了,其实可以编写中断程序的,不过中断程序有不少,太过于庞大,一个人要花上不少时间才能编写完成,主要看你自己编写的中断程序跳转...
大家还关注