首页 新闻 会员 周边 捐助

C# Task任务 取消,进度显示

0
悬赏园豆:20 [待解决问题]

项目中有两种耗时的任务,界面上都使用Task异步执行的,提供取消和进度显示功能。

一种是:

任务循环执行很多小步骤,比如方法A执行一次是1s,那么整个任务TaskA执行了1000次,此时我使用CancellationTokenSource并借助IProcess,在每次循环时候检查是否取消以来实现异步取消和进度显示。

 

另一种是:

数据库操作,一个ado.net执行sql,然后语句本身就相当于原子操作,很耗时,比如

方法B执行一次就100s,此时因为使用的是Task,我不太知道怎么在TaskB Running时结束它?

而且像这种情况下操作几乎无法提供有意义的“进度”,就好像网页获取数据那样只能是一直”显示转圈...“。

@_@

请教下第二种情况该怎么取消任务呢?

Thread有个Abort,但是Task好像没哦。

觉着ado.net是较早的库了,新的Task和这些类合作起来不是很舒服哎。。

 

 

 

everhad的主页 everhad | 初学一级 | 园豆:163
提问于:2015-02-26 22:41
< >
分享
所有回答(1)
1

函数本身是无法取消的话,只能靠线程或进程强制终止来结束其执行。 Task本身只是线程调用的一个封装,它没提供类似Abort之类的强制终止函数, 本身Abort就是不建议使用的,它会导致没有进行有效的终结操作,可能导致资源泄露及一些不可预期的错误。

如果你不在乎这个任务在执行期间占用了一个线程的开销的话,大可以仍然使用CancellationTokenSource,Task操作等该操作执行完后,看到其已经被取消了,不使用其结果即可。如果你在乎这个开销而又不关心Abort带来的隐患,可以直接用Thread或用Thread封装成一个支持取消的Task。

天方 | 园豆:5432 (大侠五级) | 2015-02-26 23:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册