C# Task Cancellation总结

1、调用cancellationTokenSource.Cancel()时,只有在task的函数体内使用token.ThrowIfCancellationRequested()方法时才会触发ContinueWith(Action<Task>,TaskContinuationOptions.OnlyOnCanceled),且代理函数中taskExceptionnull,也就是说不会抛出异常;否则只会触发ContinueWith(Action<Task>,TaskContinuationOptions.OnlyOnRanToCompletion),且也不会抛出异常;


2、调用task.Wait()时,

1)当调用token.ThrowIfCancellationRequested()之后,如果有OnlyOnCanceled延续任务,则先执行延续任务,然后在task.Wait()中抛出AggregateException异常;


2)如果产生其他异常且有OnlyOnFaulted延续任务,则先执行延续任务,然后在task.Wait()中抛出异常;

3Task.ContinueWith方法的使用:

1public Task ContinueWith(Action<Task> continuationAction,TaskContinuationOptions continuationOptions);

2)函数的第一个参数是一个委托,其参数为执行ContinueWithTask实例,同时返回一个新的Task实例;

3)如果在实例化Task的时候连续调用ContinueWith函数,实例化出来的Task变量将是ContinueWith方法最后执行并返回的Task实例,同时,每一个ContinueWith函数将用于执行上一步ContinueWith函数返回的Task实例,而不是最初的Task实例;

4)在监听Task.Wait()时,如果有ContinueWith方法,要特别注意是哪个Task实例;

4、使用cancellationTokenSource后需要调用Dispose方法来释放其非托管资源;


5、调用cancellationTokenSource.Cancel()并不会终止task的执行,只是告知task取消的请求,如果不监听cancellationToken.IsCancellationRequested属性,或者不调用ThrowIfCancellationRequested方法,task将会一直执行;


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值