带你读《深入浅出Dart》十六、事件循环和协程机制(3)

简介: 带你读《深入浅出Dart》十六、事件循环和协程机制(3)

带你读《深入浅出Dart》十六、事件循环和协程机制(2)https://developer.aliyun.com/article/1348989?groupCode=tech_library


4.宏任务队列(Macrotask Queue))

在 Dart 中,宏任务(Macrotask)是指需要在事件循环的下一轮执行的任务。与微任务不同,宏任务的执行发生在微任务队列处理完毕后。以下是一些常见的宏任务:

1 定时器事件

通过 Timer 类创建的定时器事件是宏任务。可以使用 Timer 类的方法(如 Timer.run()、Timer.periodic()、Timer(Duration, callback))来创建定时器事件,并在指定的延迟时间后执行回调函数。

 

void main() {
  print('Start');
  Timer(Duration(seconds: 2), () {
    print('Timer event');
  });
  print('End');}

 

在上面的示例中,通过 Timer 类创建的定时器事件会在指定的延迟时间后作为宏任务执行。

2 IO 事件

包括文件读写、网络请求等异步操作。当执行这些异步操作时,相应的 IO 事件会被触发,然后作为宏任务在事件循环的下一轮执行。

 

import 'dart:io';
void main() {
  print('Start');
  File('data.txt').readAsString().then((data) {
    print('IO event: $data');
  });
  print('End');}

 

在上面的示例中,文件读取的 IO 事件会在文件读取完成后作为宏任务执行。

3 UI 事件

在 Flutter 应用程序中,用户交互(如点击按钮、滑动屏幕等)触发的事件也是宏任务。这些 UI 事件会被放入事件队列,并在事件循环的下一轮执行。

 

import 'package:flutter/material.dart';
void main() {
  runApp(MyApp());}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Macrotask Example'),
        ),
        body: Center(
          child: RaisedButton(
            child: Text('Click Me'),
            onPressed: () {
              print('Button clicked');
            },
          ),
        ),
      ),
    );
  }}

 

在上面的示例中,按钮点击事件会在事件循环的下一轮作为宏任务执行。

 

宏任务与微任务相对,宏任务的执行顺序在微任务之后。在事件循环的每一轮中,首先会处理微任务队列中的所有微任务,然后才会执行宏任务。

 

通过宏任务,我们可以在 Dart 中处理一些需要在下一轮事件循环执行的任务,例如定时器事件、IO 事件和用户交互事件。这使得我们可以在合适的时机执行这些任务,并保持事件循环的稳定性和性能。


带你读《深入浅出Dart》十六、事件循环和协程机制(4)https://developer.aliyun.com/article/1348986?groupCode=tech_library

相关文章
|
7月前
|
Dart JavaScript 前端开发
带你读《深入浅出Dart》十六、事件循环和协程机制(1)
带你读《深入浅出Dart》十六、事件循环和协程机制(1)
|
7月前
|
Dart
带你读《深入浅出Dart》十六、事件循环和协程机制(2)
带你读《深入浅出Dart》十六、事件循环和协程机制(2)
|
7月前
|
Dart
带你读《深入浅出Dart》十六、事件循环和协程机制(4)
带你读《深入浅出Dart》十六、事件循环和协程机制(4)
|
7月前
|
Dart
带你读《深入浅出Dart》十六、事件循环和协程机制(5)
带你读《深入浅出Dart》十六、事件循环和协程机制(5)
|
10月前
|
Dart JavaScript 前端开发
《深入浅出Dart》事件循环和协程机制
事件循环和协程机制 Dart实现异步的方式同Javascript类似,如果你掌握Javascript的事件循环机制,那么学习Dart的异步机制就非常简单了 在 Dart 中,事件循环和协程是实现异步编程的核心机制。它们使得我们能够以非阻塞的方式处理异步操作,并允许在异步操作期间暂停和继续执行代码。本文将深入探讨 Dart 的事件循环和协程机制,并结合代码示例进行详细说明。
173 0
|
4天前
|
网络协议 调度 开发者
python中gevent基于协程的并发编程模型详细介绍
`gevent`是Python的第三方库,提供基于协程的并发模型,适用于I/O密集型任务的高效异步编程。其核心是协程调度器,在单线程中轮流执行多个协程,通过非阻塞I/O实现高并发。主要特点包括协程调度、事件循环的I/O模型、同步/异步编程支持及易用性。示例代码展示了一个使用`gevent`实现的异步TCP服务器,当客户端连接时,服务器以协程方式处理请求,实现非阻塞通信。
17 0
|
4天前
|
数据采集 数据库 C++
python并发编程:并发编程中是选择多线程呢?还是多进程呢?还是多协程呢?
python并发编程:并发编程中是选择多线程呢?还是多进程呢?还是多协程呢?
23 0
|
4天前
|
安全 调度 Python
探索Python中的并发编程:协程与多线程的比较
本文将深入探讨Python中的并发编程技术,重点比较协程与多线程的特点和应用场景。通过对协程和多线程的原理解析,以及在实际项目中的应用案例分析,读者将能够更好地理解两种并发编程模型的异同,并在实践中选择合适的方案来提升Python程序的性能和效率。
|
4天前
|
调度 Python
探索Python中的异步编程:从回调到协程
本文将介绍Python中的异步编程技术,从最初的回调函数到现代的协程模型。通过对比传统的同步编程方式和异步编程的优劣势,我们深入探讨了Python中异步编程的实现原理,以及如何利用asyncio库和async/await关键字来构建高效的异步应用程序。最后,我们还将讨论一些异步编程的最佳实践和常见问题的解决方法。
|
4天前
|
Python
Python中的协程:异步编程的利器
Python中的协程:异步编程的利器
17 1