学习
实践
活动
专区
工具
TVP
写文章

Flutter开发跨平台应用四

2.8 Dart 并发开发 Isolate

在Dart中并没有线程的概念,所有的Dart代码都运行在某个isolate中,默认环境就是一个main isolate

每个isolate都有自己的堆(Heap)和栈(Stack)

所以即使是全局数据,也彼此隔离

首字母大写的Isolate代表Isolate对象,小写的isolate代表一个独立的Dart代码执行环境

isolate仅在端口(Port)上通过消息进行通信,并且消息在接收前会进行复制

因此无法通过消息操作同一个对象

与线程类似但不共享内存的独立工作,仅通过消息进行通信

导入库:

Classes

Capability

An unforgeable object that comes back as equal when passed through other isolates.

Isolate

An isolated Dart execution context.

RawReceivePort

ReceivePort

Together with SendPort, the only means of communication between isolates.

SendPort

Sends messages to its ReceivePorts.

Exceptions / Errors

IsolateSpawnException

Thrown when an isolate cannot be created.

RemoteError

Description of an error from another isolate.

官方的文档资料(访问需要自己想办法)

https://api.dartlang.org/stable/1.24.3/dart-isolate/dart-isolate-library.html

https://api.dartlang.org/stable/1.24.3/dart-isolate/Isolate/spawn.html

Futurespawn(

voidentryPoint(message),message, {boolpaused:false,boolerrorsAreFatal,SendPortonExit,SendPortonError

})

Creates and spawns an isolate that shares the same code as the current isolate.

创建并生成与当前isolate共享相同代码的isolate(并不是共享内存,仅代码)。

参数指定在生成的隔离中调用的初始函数。入口点函数在新的isolate中作为唯一参数调用。

该函数必须是可以使用单个参数调用的顶级函数或静态方法,即,编译时常量函数值,其接受至少一个位置参数并且具有至多一个所需的位置参数。该函数可以接受任意数量的可选参数,只要它只能用一个参数调用即可。该函数不能是函数表达式的值或实例方法撕下的值。

通常,初始包含SendPort,以便spawner和spawnee可以相互通信。

如果参数设置为,则隔离将在暂停状态下启动,就在调用函数之前,就好像通过初始调用一样。要恢复隔离,请致电。

如果,和/或设置参数,该分离将充当如果分别setErrorsFatal,addOnExitListener和addErrorListener被称为具有相应参数和所述分离开始运行之前进行了处理。

如果省略,平台可以选择默认行为或继承当前隔离的行为。

您也可以拨打setErrorsFatal,addOnExitListener和addErrorListener上返回的分离方法,但除非分离开始的,它可能已经终止前的那些方法可以完成。

如果生成成功,则返回将使用Isolate实例完成的future 。否则将以错误完成。

举个例子:

定时器生成数据,循环20,1~10的随机数

后续如果项目中有具体案例在具体描述!

感谢支持!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180709G18VG700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券