手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

UWP C#如何实现async task的超时取消

时间:2024-11-12 17:27:25

1、首先,如图代码是UWP开发中常见的网络请求发送代码。但是,await可能要等很久还等不到结果。

UWP C#如何实现async task的超时取消

2、微软开发者文档中给出的写法如图所示,首席那创建cts,然后设定cts指定时间后发送取消请求,接着在调用异步请求的时候传入cts.Token。这样是没问题的,但是到了时间就取消了,没法让用户选择是否继续。

UWP C#如何实现async task的超时取消

3、如果希望等待到指定时间后,可以选择继续等待还是取消,就要手动控制cts的Cancel请求。为此,我们不能直接await异步任务,而是先用AsTask得到Task。如图是得到task之后,Delay等待一段时间,图中还没有补全500毫秒后请求没完成的处理逻辑。但是,这么做可能会做无谓的等待。

UWP C#如何实现async task的超时取消

4、这样做虽然能work,但是会造成不管异步任务有没有提前完成都要等固定时间。

UWP C#如何实现async task的超时取消

5、为了减少等待时间的浪费,完整的逻辑如图所示,通过循环每次等待50毫秒的方式来减少等待时间。如图实现了等待4秒时文字提示,等待10秒时要用户选择是否继续。

UWP C#如何实现async task的超时取消

6、最终效果如图所示。由于每50毫秒查看一次状态,查看CPU未见占用率有变化,而且没有察觉出程序变慢。

UWP C#如何实现async task的超时取消
© 手抄报圈