Dart其实是单线程的语言。
异步不等于多线程,说白了是把一个任务扔到另一个地方去,不要阻碍我当前代码的执行,等闲下来时再去执行。(多个任务来回调度,互不干涉的)
常见的异步操作:1、通过网络获取数据;2、写入数据库;3、从文件读取数据。
要在Dart中执行异步操作,我们可以使用Future类以及async和await关键字
//timeout 超时操作 catchError 处理异常 whenComplete完成
Future((){}).timeout((){}).then((){}).catchError((){}).whenComplete((){});
void test() async { await Future((){}); } //函数里,必须后面的操作是异步的,才能使用await
Future任务按顺序添加进队列,同时,Future后面跟着的then()是在Future任务执行后就紧跟着立马执行的,也就是说then 会比Future的优先级高。
如果有多个Future任务执行,但是我们想要在多个任务执行完成后再做其他的事情,我们可以用Future.wait讲多个Future任务用数组包起来,如下:
Future.wait([Future((){}),Future((){})]).then((){}); //then里面拿到的是对应的数组值
对于异步编程,我们也可以用Timer.run()来操作完成,其实不难发现 Future内部也是用的Timer.run()来实现了异步编程。
网友评论