做展柜平时在哪里网站推广,青岛原创工程设计有限公司,深圳大型网络科技公司,深圳福田房价前言
在开发过程中#xff0c;取消需求是很常见的#xff0c;但很容易被忽略。然而#xff0c;取消需求的好处也很大。例如#xff0c;在页面中会发送很多请求。如果页面被切走并处于不可见状态#xff0c;就需要取消未完成的请求任务。如果未及时取消#xff0c;则可能…前言
在开发过程中取消需求是很常见的但很容易被忽略。然而取消需求的好处也很大。例如在页面中会发送很多请求。如果页面被切走并处于不可见状态就需要取消未完成的请求任务。如果未及时取消则可能会导致以下负面影响
消耗用户额外数据流量。任务回调持有全局上下文变量未及时释放存在内存泄漏风险异步请求过多消耗大量系统资源拖慢 UI 线程造成卡顿。
在 Flutter 中如何取消已经在进行的任务呢首先需要掌握一些基础知识.
前置知识
Future#any 方法
传入一个 Future 任务列表返回第一个完成的异步任务无论成功或失败。
定义 用法
如下 5 个异步任务代码第五行虽然第二执行但是最先执行完毕所以第一个返回至此整个 Future.any 函数执行完毕。 结果输入如下 总结
Future.any 实际就是一个 Completer,N 个 Future 叠加在一起谁先完成算谁的。Future.any 可以理解成百米赛跑其中每个选手就是一个 Future谁跑最快到终点谁就赢了。
Dio 取消实现解析
dio 版本 dio: dev v5.0.3 git: 67f07b86a0976c14a6e19061563832d92ed6772b branch: main 如何取消
请求中传入 CancelToken 对象然后调用 token.cancel 方法即可
final cancelToken CancelToken();
dio.get(url, cancelToken: cancelToken).catchError((DioError err) {if (CancelToken.isCancel(err)) {print(Request canceled: ${err.message});} else{// handle error.}
});
// Cancel the requests with cancelled message.
token.cancel(cancelled);流程解析
思路在实际任务执行前使用 Future.any 函数插入取消任务。如果实际任务没有执行完就有机会取消它。
如下代码黄色标注按照步骤来读就行。 总结CancelToken 就像一个渣男而 Future.any 则提供了公平竞争的机会。只要妹子还没有交男朋友渣男就有机会中途得手。
说明
取消任务不仅限于网络请求。任何实际业务中包含不必要的耗时操作都可以通过 Future.any 配合 CancelToken 来实现取消