
Dart采用单线程模型,通过Event Loop机制处理异步任务。代码按main函数顺序执行,但通过事件队列实现非阻塞等待。Event Loop不断轮询事件队列,处理如I/O、网络等异步事件回调。
Dart中存在两个任务队列:
微任务队列
scheduleMicrotask添加任务事件队列
Future封装实现Future(() => print('Task 1'));
Future(() => print('Task 2'))
.then((_) => print('Continue 1'))
.then((_) => print('Continue 2'));then回调与Future共用事件循环:// 执行顺序:f12 → f11 → f1 → f10 → f2 → f3 → f5 → f4 → f6 → f9 → f7 → f8
Future(() => print('f1'));
Future(() => print('f2'))
.then((_) {
print('f3');
scheduleMicrotask(() => print('f4'));
}).then((_) => print('f5'));典型异步函数封装方式:
Future<String> fetchData() async {
final response = await http.get('url');
return response.body;
}关键要点:
async标记异步函数await暂停执行直到Future完成Future<T>类型try/catch或catchError对于CPU密集型任务,使用Isolate实现并发:
void isolateEntry(SendPort port) {
// 耗时计算
port.send(result);
}
Future<void> startIsolate() async {
final receivePort = ReceivePort();
await Isolate.spawn(isolateEntry, receivePort.sendPort);
receivePort.listen((data) {
// 处理结果
});
}特性:
await减少不必要的异步切换then链式调用的执行顺序通过理解Dart的事件循环机制,可以编写出高效且响应迅速的Flutter应用程序。单线程模型配合合理的异步任务划分,完全能够满足大多数UI交互场景的需求。