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

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

(2)如果产生其他异常且有OnlyOnFaulted延续任务,则先执行延续任务,然后在task.Wait()中抛出异常;
3、Task.ContinueWith方法的使用
(1)public Task ContinueWith(Action<Task> continuationAction,TaskContinuationOptions continuationOptions);
(2)函数的第一个参数是一个委托,其参数为执行ContinueWith的Task实例,同时返回一个新的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将会一直执行;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法源代码
c# 如何实现MD5,SHA1,SHA256,SHA512等常用加密算法,需要的朋友可以参考下2012-12-12
Unity的AssetPostprocessor之Model函数使用实战
这篇文章主要为大家介绍了Unity的AssetPostprocessor之Model函数使用实战,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-08-08
CAD2008+VS2008开发ObjectARX加载失败问题(推荐)
这篇文章主要介绍了CAD2008+VS2008开发ObjectARX加载失败问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-04-04
Unity编辑器预制体工具类PrefabUtility常用函数和用法
这篇文章主要为大家介绍了Unity编辑器预制体工具类PrefabUtility常用函数及用法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-08-08


最新评论