标签:异步 await 笔记 dart 学习 Future async main 方法
异步编程:futures,async,await
几个关键字:
- 同步操作:一个同步操作用来在某个操作完成之前阻塞线程
- 同步方法:一个同步方法只执行同步操作
- 异步操作:异步操作允许其他操作在该异步操作完成之前开始执行
- 异步方法:异步方法至少执行一个异步操作,但同时也可以执行同步操作.
future是什么
类似于java,future是一个异步操作的结果,包含两种状态:未完成和已完成
future可以指定一个泛型如Future, 那么如果异步操作完成则可以从此future中取出一个String.
使用futures:async和await
async和await提供了定义异步方法和使用异步方法的结果的方式.使用async和await的两个基本原则:
- 在方法体前加上async来定义一个异步方法
- await关键字只能用在async方法中
如何将一个main方法转变为异步方法?
- 首先在方法体前加上async
void main() async { ··· }
- 如果异步方法有明确的返回值,则将返回值修改为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作用是阻塞线程,等后面的异步方法执行完后再继续执行后续代码
标签:异步,await,笔记,dart,学习,Future,async,main,方法 来源: https://blog.csdn.net/u013190297/article/details/111043531
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。