事件循环在Dart中开始以及事件队列如何工作

问题描述 投票:0回答:1

第一个问题是事件循环何时开始?我在一个网站上读到它是在main方法之后开始的但是为什么当我们尝试这样的事情

main()async {
Future(()=>print('future1'));
await Future(()=>print('future2'));
print('end of main');
}

//the output is :
//future1
//future2
//end of main

在此示例中,当我们使用await关键字和事件循环到达future2之后,它会暂停吗?还是我错了:(

第二个问题是如何将事件添加到事件队列中如果是FIFO,为什么在此示例中,将来2在未来1

main(){
Future.delayed(Duration(seconds:5) , ()=>print('future1'));
Future.delayed(Duration(seconds:2) , ()=>print('future2')); 
}
asynchronous dart future event-loop
1个回答
0
投票

[事件循环在没有其他东西运行时运行(例如main方法已完成,您正在等待将来完成)。

您的例子很有意义,因为第一行将事件放在事件队列上,所以现在队列中的第一项是“ print('future1')”。在下一行中,您将另一个事件放在队列中,该事件称为“ print('future2')”,现在您等待此事件完成。

由于您的main方法没有等待什么,所以将执行事件循环。由于队列上的第一个事件是“ print('future1')”,因此将首先执行该事件。但是由于主要方法仍在等待将来的“ print('future2')”完成,因此事件循环将执行另一个要执行的事件,该事件将是“ print('future2')”。]

由于此事件是主要方法正在等待的事件(并且事件队列中没有其他事件,所以main()将运行最后一个调用“ print('main of end')”。]]

在下一个示例中,您认为Future和Future.delayed是相同的,但事实并非如此。使用Future.delayed之前,事件队列中没有任何事件。取而代之的是,在VM外部运行了一个线程,该线程知道何时触发下一个计时器,最终将事件放入队列。因此,仅在计时器到期时才将事件放入事件队列中(因此,将首先执行future2)。

© www.soinside.com 2019 - 2024. All rights reserved.