C# Task Cancellation使用总结

 更新时间:2024年12月31日 09:01:11   作者:Soarever  
本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延续

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#使用BitConverter与BitArray类进行预定义基础类型转换

    C#使用BitConverter与BitArray类进行预定义基础类型转换

    这篇文章介绍了C#使用BitConverter与BitArray类进行预定义基础类型转换的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#中分部方法和分部类分析

    C#中分部方法和分部类分析

    这篇文章主要介绍了C#中分部方法和分部类基本用法,并且较为详细的分析了分部方法和分部类使用时的注意事项,需要的朋友可以参考下
    2014-11-11
  • ref与out之间的区别深入解析

    ref与out之间的区别深入解析

    以下是对c#中ref与out之间的区别进行了详细分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • .NET单点登陆的实现方法及思路

    .NET单点登陆的实现方法及思路

    这篇文章介绍了.NET单点登陆的实现方法及思路,有需要的朋友可以参考一下,希望对你有所帮助
    2013-07-07
  • C#实现把图片转换成二进制以及把二进制转换成图片的方法示例

    C#实现把图片转换成二进制以及把二进制转换成图片的方法示例

    这篇文章主要介绍了C#实现把图片转换成二进制以及把二进制转换成图片的方法,结合具体实例形式分析了基于C#的图片与二进制相互转换以及图片保存到数据库的相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • C#处理TCP数据的方法详解

    C#处理TCP数据的方法详解

    Tcp是一个面向连接的流数据传输协议,用人话说就是传输是一个已经建立好连接的管道,数据都在管道里像流水一样流淌到对端,那么数据必然存在几个问题,比如数据如何持续的读取,数据包的边界等,本文给大家介绍了C#处理TCP数据的方法,需要的朋友可以参考下
    2024-06-06
  • C#读写json文件操作的正确方法

    C#读写json文件操作的正确方法

    在现代开发中JSON已经成为了一种非常流行的数据格式,下面这篇文章主要给大家介绍了关于C#读写json文件操作的正确方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • C#之CLR内存深入分析

    C#之CLR内存深入分析

    这篇文章主要介绍了C#之CLR内存深入分析,对引用类型进行了深入讨论,需要的朋友可以参考下
    2014-08-08
  • c#闭包使用方法示例

    c#闭包使用方法示例

    这篇文章主要介绍了如何使用C#的闭包功用,例子很简单,大家参考使用吧
    2013-11-11
  • C#中SequenceEqual的具体使用

    C#中SequenceEqual的具体使用

    SequenceEqual是LINQ扩展方法之一,用于比较两个序列(如数组、列表等)的元素是否相等,本文就来介绍一下SequenceEqual的具体使用,感兴趣的可以了解一下
    2024-01-01

最新评论