Flutter多线程以及异步

dart是一个单线程语言但是同时又支持异步操作

多线程的概念:

多线程并非是异步,这是两种概念

多线程是开辟另外一个线程来处理事件,每个线程都有单独的事件队列,互不影响,这个新线程和主线程是并列执行的,只不过共享数据空间。

异步则是将异步任务和当前线程的任务分开,异步任务后面的任务,不会等待异步任务执行完再执行,而是直接执行,

dart中有两种队列分别是事件队列以及微任务队列

(1)事件队列(Event queue):包括所有的外来事件

(2)微任务队列(Microtask queue):表示一个短时间内会完成的一步任务,他的优先级是最高的

在事件循环中,dart总是先查询微任务队列是否有可执行的任务,如果没有才去执行事件队列,

所以如果微任务有过多的任务,就会霸占当前的事件循环,造成阻塞卡顿

为了保证渲染和其他功能性不卡顿,我们可以尽量将耗时等操作放在Event queue (事件队列)中进行操作

async:异步函数标识,一般与await和Future配合使用,如果一个函数是异步的,他一般表示开始一个异步操作,这时候如果它有返回值那么一定要返回Future否则就会报错

await:等待异步结果返回,一般加载Futute函数体之前,表明后面的代码需要等待

Future函数体内的内容执行完在执行,实现同步执行.

单独给函数添加async关键字, 没有意义,函数是否是异步的,主要看Future

Future<T> 类,其表示一个 T 类型的异步操作结果。如果异步操作不需要结果,则类型为Future<void>。也就是说首先Future是个泛型类,可以指定类型。如果没有指定相应类型的话,则Future会在执行动态的推导类型。

Future的工厂构造函数,工厂构造函数并不会自己生成实例,而是通过

代码来决定返回的实例对象,在Dart中在构造方法前面使用关键词factory(工厂)就可以变成工厂构造函数,就是说可以放在命名函数前也可以放在命名函数后

//未完成多线程学习,剩下等待学习完成后补上

猜你喜欢

转载自blog.csdn.net/a3244005396/article/details/128108679