void _parallelOp() async {
try {
// Receive port.
ReceivePort receivePort = ReceivePort();
// Creating a new tread or isolate in flutter terms.
await Isolate.spawn(ParallelOperation.parallelOp, {
AppConsts.sendPort: receivePort.sendPort,
// pass models that used in the calculation
// or requires modifications
// as key value pair.
});
// updated values/models.
final Map<String, dynamic> foo = await receivePort.first;
} catch (e) {
await Future.error(StringConsts.errorInParallelOperation);
}
}
字符串 隔离的方法将定义如下,记住隔离方法需要是一个具有隔离生成方法的不同类。
class ParallelOperation {
/// [parallelOp] do the parallel computing.
static Future<void> parallelOp(Map<String, dynamic> args) async {
// retrieve your models.
final dynamic model = args['key'];
// Do the computation or modification.
/// Exiting the isolate,
/// as all the operations are completed.
/// pass direct model or map having multiple values and model.
Isolate.exit(args[AppConsts.sendPort], model);
}
}
1条答案
按热度按时间3j86kqsm1#
对于繁重的计算和异步更新UI使用单独的隔离是防止主UI线程变得滞后的好策略。然而,隔离之间的通信涉及消息传递,并且它可能会引入一些开销。
在这里,我演示了隔离与不通信,计算值退出隔离,并将它们传递回主线程,这样你就可以更新UI后,隔离得到完成。
字符串
隔离的方法将定义如下,记住隔离方法需要是一个具有隔离生成方法的不同类。
型
为了在运行的隔离中发送数据,您需要侦听receivePort并使用sendPort从隔离中发送数据。