dart学习笔记(二)

异步编程:futures,async,await

几个关键字:

  • 同步操作:一个同步操作用来在某个操作完成之前阻塞线程
  • 同步方法:一个同步方法只执行同步操作
  • 异步操作:异步操作允许其他操作在该异步操作完成之前开始执行
  • 异步方法:异步方法至少执行一个异步操作,但同时也可以执行同步操作.

future是什么

类似于java,future是一个异步操作的结果,包含两种状态:未完成和已完成
future可以指定一个泛型如Future, 那么如果异步操作完成则可以从此future中取出一个String.

使用futures:async和await

async和await提供了定义异步方法和使用异步方法的结果的方式.使用async和await的两个基本原则:

  1. 在方法体前加上async来定义一个异步方法
  2. await关键字只能用在async方法中

如何将一个main方法转变为异步方法?

  1. 首先在方法体前加上async
void main() async { ··· }
  1. 如果异步方法有明确的返回值,则将返回值修改为Future, T就是返回值的类型.
Future<T> main() async { ··· }

如果没有明确的返回值,则返回值类型改为Future

Future<void> main() async { ··· }

main方法变成async方法后,就可以在里面使用await来等待futrue执行完成了:

Future<String> createOrderMessage() async{
  var order = await fetchUserOrder();
  return 'Your order is: $order';
}

Future<String> fetchUserOrder() =>
    // Imagine that this function is more complex and slow.
    Future.delayed(
      Duration(seconds: 2),
      () => 'Large Latte',
    );
Future<void> main() async { 
	print(await createOrderMessage());
}

从上述代码可以看出,同步方法和异步方法的区别在于三点:
1. 返回值类型从String变成了Future
2. 在main()和 createOrderMessage()方法体前加上了async关键字
3. 在调用异步方法 fetchUserOrder() 和createOrderMessage()之前加上await关键字
async的作用是让方法异步执行,不受前面代码的影响.await作用是阻塞线程,等后面的异步方法执行完后再继续执行后续代码

上一篇:Java8 - Future 接口


下一篇:解读报告 Future of Project Management