Dart是单线程语言,::dart:async::库是Dart 语言支持异步编程的基础库。库中提供了Future 类和Stream 类。—呆瓜笔记
Future
- ::Future:: 代表着在将来会获取到一个值的异步函数
- ::await:: 返回一个Future值
- ::async:: 标记一个函数为异步
- ::.delayed()::延迟执行
- ::.then():: 注册一函数,在Future成功返回后执行
- ::.wait():: 等待一组函数执行完成,后通常与.then搭配使用
- ::.catchError():: 捕捉Future返回异常
1 2 3 4 5 6 7 8 9 10 11 12 13
| import 'dart:async'; Future gatherNewsReports_async() async { String path = 'https://www.dartlang.org/f/dailyNewsDigest.txt'; return (await HttpRequest.getString(path)); } Future printDailyNewsDigest_async() async { String news = await gatherNewsReports_async(); print(news); } // Parallel processing using the Future API Future.wait([expensiveA(), expensiveB(), expensiveC()]) .then((List responses) => chooseBestResponse(responses)) .catchError((e) => handleError(e));
|
Stream
一个Stream 对象提供了一个异步数据的队列。在这个队列中可能包含事件(鼠标点击)、大数据块。权且相当于Future复数..
- Stream是一个返回数据的异步队列
- 数据队列里面包含用户交互数据,或从文件中读取的数据
- 可以使用await for或listen()来处理stream对象的数据
- API提供异常捕捉—try-catch语句
- 包含两个类型:单个订阅,广播Stream
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import 'dart:async'; import 'dart:async'; //返回一个迭代值的异步函数 Future<int> sumStream(Stream<int> stream) async { var sum = 0; //迭代-await for只能操作async函数 await for (var value in stream) { sum += value; } return sum; } //返回【1...10】的异步队列 *代表更加安全可靠 Stream<int> countStream(int to) async* { for (int i = 1; i <= to; i++) { yield i; } }
main() async { var stream = countStream(10); var sum = await sumStream(stream); print(sum); // 55 }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import 'dart:async'; Future<int> lastPositive(Stream<int> stream) async { var lastValue = null; await for (var value in stream) { //提取最后大于0的值 if (value < 0) continue; lastValue = value; } return lastValue; }
main() async { var data = [1, -2, 3, -4, 5, -6, 7, -8, 9, -10]; var stream = new Stream.fromIterable(data);//将数组转换为Stream数据 var lastPos = await lastPositive(stream);//等待返回 print(lastPos); // 9 }
|
Thanks for your reading~