Структурированная параллельная обработка Java 21, требуется предсказуемый порядок исключений подзадачJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Структурированная параллельная обработка Java 21, требуется предсказуемый порядок исключений подзадач

Сообщение Anonymous »


Я новичок в параллельном коде и пытался преобразовать некоторый код, основанный на исполнителях, в структурированный параллелизм, но я потерял важное свойство, которое мне нужно каким-то образом сохранить.

При использовании следующего кода, использующего структурированный параллелизм с предварительной версией Java 21:

try (varscope = new StructuredTaskScope.ShutdownOnFailure()) { Подзадача d1Subtask =scope.fork(() -> getData1(input)); Подзадача d2Subtask =scope.fork(() -> getData2(input)); область видимости.join().throwIfFailed(); // [1] вар данные1 = d1Subtask.get(); // [2] вар data2 = d2Subtask.get(); вернуть новый ответ (данные1, данные2); } В [1] выдается первое исключение из двух подзадач, а я этого не хочу. Мне нужно запустить обе задачи параллельно, но сначала мне нужен результат d1Subtask на случай сбоя. Другими словами, если обе подзадачи завершаются с ошибкой Data1Exception и Data2Exception соответственно, я должен выдать Data1Exception независимо от того, какая из них завершилась первой.

Если я изменю его на scope.join();, то [2] может завершиться ошибкой, если d1Subtask не выполнен. Существует d1Subtask.state(), но ожидание выхода из состояния State.UNAVAILABLE противоречит идее структурированного параллелизма.

Учитывая это, можно ли изменить приведенный выше код, чтобы он ждал результата d1Subtask? Я подумал, что что-то вроде scope.join(d1Subtask) или d1Subtask.join() будет полезной функцией. Является ли это пробелом в предоставленном API или есть способ добиться того, чего я хочу, с помощью чистого, читаемого кода?
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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