Есть ли в AMPHP Parallel способ получить все задачи, которые были выполнены до TimeoutCancellation (попробуйте задачу пеPhp

Кемеровские программисты php общаются здесь
Ответить
Гость
 Есть ли в AMPHP Parallel способ получить все задачи, которые были выполнены до TimeoutCancellation (попробуйте задачу пе

Сообщение Гость »

Я работал над распараллеливанием некоторых конвейеров данных с помощью AMPHP в большой базе кода, и теперь я хотел бы разрешить тайм-аут на случай сбоя одного из конвейеров.
Точное поведение, которое мне нужно, - это установить тайм-аут для каждой задачи в 120 секунд и иметь возможность собирать результаты всех успешных задач, одновременно записывая неудачи.
Приблизительный набросок код:

Код: Выделить всё

// Turn an async instance (data pipeline method) to a future using an AMPParallelTask wrapper.
$toFuture = fn(Asynchronous $instance) => submit(new AMPParallelTask($instance, $securableId, $securableType, $accountId),
new TimeoutCancellation(0.1)
)->getFuture();
[$errors, $responses] = awaitAll(
array_map($toFuture, $asynchronousInstances)
)
Проблема в том, что метод Tasks Task::run может содержать логику с блоками try {} catch (Exception $e) { в них. Когда я запускаю приведенный выше код, отмена задачи вызывает исключение CancellationException, которое перехватывается любым перехватом попытки, не специализирующимся на исключении определенного типа. Если в попытке есть медленная задача, это может полностью нарушить логику и дать неправильные результаты.
Мне интересно, есть ли способ выполнить то, что я хочу, не отказываясь от всех попыток {} catch (Exception $e) { блокирует логику выполнения? Моя интуиция подсказывает, что, возможно, я смогу использовать каналы...?

Источник: https://stackoverflow.com/questions/781 ... d-before-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»