Flutter如何实现至少延迟2秒且总耗时不超2秒的任务处理?
解决方案
你的问题核心是串行任务导致总耗时叠加,原代码先等待2秒延迟,再执行Firestore查询,总耗时为两者之和。要实现并行执行,让延迟和查询任务同时启动,总耗时就会被最长的任务(2秒延迟)覆盖。
修改后的代码如下:
DateTime beforeDate = DateTime.now(); try { // 同时启动延迟任务与Firestore查询任务 final results = await Future.wait([ Future.delayed(Duration(seconds: 2)), FirebaseFirestore.instance .collection('news') .where('id', isEqualTo: id) .get() ]); QuerySnapshot snapshot = results[1]; DateTime afterDate = DateTime.now(); print(afterDate.difference(beforeDate).inMilliseconds); // 约2000毫秒 return NewsModel.fromJson(snapshot.docs.first.data()); } catch (ex) { print('ex: $ex'); rethrow; }
关键说明:
Future.wait()会同时触发传入的所有Future任务,等待所有任务完成后才继续执行后续逻辑- 延迟任务的2秒时长覆盖了查询的0.373秒耗时,最终总耗时约等于2秒
- 异常处理逻辑保持原有逻辑,任何一个任务抛出异常都会被try-catch捕获并重新抛出
内容的提问来源于stack exchange,提问作者Poringe
相关产品推荐
相关产品推荐

