异步方法下的暂停

一、不要用 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() 手动发送取消信号。

想提前终止:

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

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

猜你喜欢

转载自blog.csdn.net/2201_75837601/article/details/128554764