FlutterDartDart 开发

Dart语言的异步编程之Future和async-await是杀

2019-02-08  本文已影响53人  iCloudEnd

Dart语言的异步编程之Future和async-await是杀手级功能

什么async和await

还记得《Dart语言的运算符重载》中讲到的语法糖么?async和await又是一块比较好吃的语法糖。Dart语言在2014年就已经开始支持async-await语法了。

其它语言对持async-await语法支持

await是发现于C#5.0、Python3.5中、Hack以及Kotlin 1.1的一个特性。

什么future

Dart语言中的Future表示在将来某时获取一个值的方式。当一个返回Future的函数被调用的时候,做了两件事情:
(1)函数把自己放入队列和返回一个未完成的Future对象
(2)之后当值可用时,Future带着值变成完成状态。
(3)为了获得Future的值,有两种方式:使用async和await和使用Future的接口

上面描述可能比较抽象,我还是从future这个来源讲起了吧。

在编程领域,为了更好更方便的开发并发程序,计算机理论界的大牛(Henry Baker和Carl Hewitt)发明了future概念。future描述了一个对象, 该对象充当最未知结果的代理。例如我们刷了一下微信朋友圈,future就代表腾讯服务返回给我的好友朋友圈动态。

future概念在分布式计算中得到了应用 。在性能方面减少了,通信往返的延迟。在语义方面,future提高并行程序的鲁棒性和可读性。

Future async await demo

异步获取服务器文件
import 'dart:async';
import 'dart:html';

Future<void> printDailyNewsDigest() async {
  var newsDigest = await gatherNewsReports();
  print(newsDigest);
}

main() {
  printDailyNewsDigest();
  printWinningLotteryNumbers();
  printWeatherForecast();
  printBaseballScore();
}

printWinningLotteryNumbers() {
  print('Winning lotto numbers: [23, 63, 87, 26, 2]');
}

printWeatherForecast() {
  print("Tomorrow's forecast: 70F, sunny.");
}

printBaseballScore() {
  print('Baseball score: Red Sox 10, Yankees 0');
}

const news = '<gathered news goes here>';
const oneSecond = Duration(seconds: 1);

// 模拟服务器demo
//Future<String> gatherNewsReports() =>
//    Future.delayed(oneSecond, () => news);

Future<String> gatherNewsReports() => HttpRequest.getString(
      'https://www.dartlang.org/f/dailyNewsDigest.txt',
    );


输出结果:

Winning lotto numbers: [23, 63, 87, 26, 2]
Tomorrow's forecast: 70F, sunny.
Baseball score: Red Sox 10, Yankees 0
<gathered news goes here>

上一篇下一篇

猜你喜欢

热点阅读