Есть ли способ убить задачи, созданные функцией вычисления? - PullRequest
2 голосов
/ 06 марта 2020

Я знаю, что функция compute основана на API Isolate. Для Isolate вы можете запросить отключение lsolate, вызвав метод kill объекта islate.

Может ли функция compute вручную закрыть Isolate при выполнении этой задачи?

1 Ответ

2 голосов
/ 06 марта 2020

Нет

Невозможно убить функцию compute .

Почему

Причина этого заключается в том, что взгляд на исходный код функции compute , созданный isolate уничтожается только после завершения завершителя result:

final Completer<R> result = Completer<R>();
...
await result.future;
...
isolate.kill(); // Always awaits the result.

Результат завершается, только если имеется возвращается ошибка или функция, которую вы передаете compute.


Более того, вы не имеете доступ к isolate самостоятельно потому что он создан внутри функции compute .

Решение

Если вы хотите иметь возможность уничтожить запускаемый изолят, не используйте compute. Вместо этого вам придется создать Isolate самостоятельно.

...