异步方法下的暂停

一、不要用 sleep()

  1. 想要在异步方法中暂停一段时间,不要用 thread.Sleep 因为它阻塞的是当前的线程,会阻塞调用线程,可能会把主线程阻塞。要用 await Task.Delay() 。

sleep() 会降低并发,用点餐举例子。如果用 sleep() 的话相当于服务员不工作了,而 await Task.Delay() 相当于客人休息暂停动作。

二、CancellationToken

有时候需要提前终止任务,比如请求超时、用户取消请求等情况。很多异步方法都有cancellation 参数,用于获得提前终止执行的信号。

    • CancellationToken结构体

  1. none:空结构体不可以为 null ,所以提供了个特殊的成员 none。

  1. bool IsCancellationRequested 是否取消发出了取消任务的请求。

  1. (了解一下)Register(Action callback) 注册取消监听

  1. ThrowIfCancellationRequested() 如果任务被取消,执行到这段话就抛异常。

  1. 通过 CancellationTokenSource 这个类来创建 CancellationToken 结构体,一般不自己手动 new 结构体,一般通过 CancellationTokenSource 来创建 CancellationToken 对象。

  1. CancelAfter() 指超过多少时间后自动取消发送信号。

  1. Cancel() 手动发送取消信号。

想提前终止:

这种方式需要我们去响应取消这个步骤,这个就是响应取消的步骤。

还可以这么写,如果请求被取消了,来抛一个异常:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值