Dart:如何在导入的包中指定Isolate URI?

时间:2016-05-08 17:54:31

标签: dart dart-isolates

我已经编写了一些代码,我想在一个包中提供它,但是我想将它作为一个worker暴露给包消费者。为此,我创建了一个包装类,它在内部运行隔离,并使用send命令和侦听器与Isolate通信以提供功能。

当我想使用binweb目录中的这个包装类时出现问题:提供的Uri是从running / main Isolate的目录中插入的而不是从包根。 binpackagename|bin/webpackagename|webIsolate// Exports the next file so the class in it will be package visible packageroot -> lib/package_exports_code_that_spawns_isolate.dart // This file should contain URI that always resolve to the next file packageroot -> lib/code_that_spawns_isolate.dart // The main worker/Isolate file packageroot -> lib/src/worker/worker.dart

我想将此类导出给消费者,以便他们可以选择比构建自己的for(int x =0; x< cartas.length;x++) { if(cartas[x].isEnabled()) //enabled { break; //a button is still enabled so cancel loop } else if(x == cartas.length-1&& !cartas[x].isEnabled()) { //All cards have been disabled. Do Something. } } 更简单的方法,但我不确定如何指定将在spawnUri中使用的主文件。 / p>

有没有办法指定文件,因此无论运行主隔离的位置如何,它都将始终解析为正确的文件。

结构:

isEnabled();

感谢。

1 个答案:

答案 0 :(得分:2)

要引用包中的库,您应该使用package: URI。 类似的东西:

var workerUri = Uri.parse("package:myPackage/src/worker/worker.dart");
var isolate = await Isolate.spawnUri(workerUri,...);

这并不完美,因为它要求您将软件包名称硬连接到代码中,但我相信这是目前可用的最佳选择。

Isolate.spawnUri函数不会(也不能)解析相对URI引用wrt。调用它的源文件 - Dart库中没有任何内容取决于它的调用位置,这太简单了 - 所以相对URI不起作用。引用您的worker的唯一绝对URI是package: URI,因此您必须使用它。