Метод spawn< T>
Создаёт и запускает изолированное выполнение с тем же кодом, что и текущее изолированное выполнение.
Аргумент entryPoint определяет начальную функцию, которая будет вызвана в запущенном изолированном выполнении. Функция-точка входа вызывается в новом изолированном выполнении с message в качестве единственного аргумента.
Функция должна быть функцией верхнего уровня или статическим методом, которые могут вызываться с одним аргументом, то есть значением функции, заданным на этапе компиляции, которое принимает по крайней мере один позиционный параметр и имеет не более одного обязательного позиционного параметра. Функция может принимать любое количество необязательных параметров, при условии, что она может вызываться только с одним аргументом. Функция не должна быть значением выражения функции или отложенным методом экземпляра.
Обычно начальный message содержит SendPort, чтобы спавнер и спавнинги могли общаться друг с другом.
Если параметр paused установлен в true, изолированное выполнение начнётся в приостановленном состоянии, незадолго до вызова функции entryPoint с message, как если бы был выполнен начальный вызов isolate.pause(isolate.pauseCapability). Для возобновления изолированного выполнения вызовите isolate.resume(isolate.pauseCapability).
Если параметры errorsAreFatal, onExit и/или onError заданы, изолированное выполнение будет действовать так, как будто были вызваны соответственно setErrorsFatal, addOnExitListener и addErrorListener с соответствующим параметром и были обработаны до запуска изолированного выполнения.
Если debugName задан, запущенное Isolate будет идентифицироваться по этому имени в отладчиках и журналах.
Если errorsAreFatal опущен, платформа может выбрать поведение по умолчанию или унаследовать поведение текущего изолированного выполнения.
Вы также можете вызвать методы setErrorsFatal, addOnExitListener и addErrorListener на возвращённом объекте изолированного выполнения, но если изолированное выполнение было запущено как paused, оно может уже завершиться, прежде чем эти методы смогут завершиться.
Возвращает обещание, которое выполнится с экземпляром Isolate в случае успешного запуска. В противном случае оно выполнится с ошибкой.
Можно ожидать, что базовые затраты памяти на изолированное выполнение будут порядка 30 Кб.
Реализация
external static Future<Isolate> spawn<T>(
void entryPoint(T message), T message,
{bool paused = false,
bool errorsAreFatal = true,
SendPort? onExit,
SendPort? onError,
@Since("2.3") String? debugName});
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-isolate/Isolate/spawn.html