Я пытаюсь использовать structuredTaskScope на Java 25. Однако я не мог запустить structuredTaskScope.timeOutexception. < /p>
Пожалуйста, найдите код здесь и ниже: < /p>
package com.tugalsan.tst.thread;
import java.time.Duration;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.Callable;
import java.util.concurrent.StructuredTaskScope;
import java.util.concurrent.StructuredTaskScope.Joiner;
import java.util.concurrent.StructuredTaskScope.Subtask.State;
public class Main {
public static void main(String... s) {
Callable tenSecsTask = () -> {
Thread.sleep(Duration.ofSeconds(10));
return "a";
};
var allAwait = allAwait("allAwait", Duration.ofSeconds(2), tenSecsTask);
allAwait.resultsSuccessful().forEach(IO::println);
IO.println("main.done..");
}
public static record AllAwait(String name, Duration timeout, List resultsSuccessful, List resultsFailedOrUnavailable, Optional timeoutException) {
}
public static AllAwait allAwait(String name, Duration timeout, Callable... callables) {
try (var scope = StructuredTaskScope.open(Joiner.awaitAll(),
cf -> {
if (name != null) {
cf.withName(name);
}
if (timeout != null) {
cf.withTimeout(timeout);
}
return cf;
}
)) {
var subTasks = Arrays.stream(callables).map(scope::fork).toList();
scope.join();
var resultsSuccessful = subTasks.stream().filter(st -> st.state() == State.SUCCESS).map(StructuredTaskScope.Subtask::get).toList();
var resultsFailedOrUnavailable = subTasks.stream().filter(st -> st.state() == State.FAILED || st.state() == State.UNAVAILABLE).toList();
return new AllAwait(name, timeout, resultsSuccessful, resultsFailedOrUnavailable, Optional.empty());
} catch (InterruptedException | StructuredTaskScope.TimeoutException e) {
throwIfInterruptedException(e);
if (e instanceof StructuredTaskScope.TimeoutException et) {
return new AllAwait(name, timeout, List.of(), List.of(), Optional.of(et));
}
return null;
}
}
....
}
< /code>
Показывает вывод консоли, показан, вызов успешно завершает свою работу, но предполагается, что он должен провалиться.Executing command line: [C:\bin\java\home\bin\java.exe, --enable-preview, --enable-preview, --add-modules, jdk.incubator.vector, -classpath, C:\git\tst\com.tugalsan.tst.thread\target\classes, com.tugalsan.tst.thread.Main]
WARNING: Using incubator modules: jdk.incubator.vector
a
main.done..
< /code>
Я уже пропустил добавление кода обработки прерванной обработки. Пожалуйста, найдите его ниже: < /p>
@SuppressWarnings("unchecked")
private static void _throwAsUncheckedException(Throwable exception) throws T {
throw (T) exception;
}
@Deprecated //only internalUse
private static void throwAsUncheckedException(Throwable exception) {
Main._throwAsUncheckedException(exception);
}
public static R throwIfInterruptedException(Throwable t) {
if (isInterruptedException(t)) {
Thread.currentThread().interrupt();
throwAsUncheckedException(t);
}
return null;
}
public static boolean isInterruptedException(Throwable t) {
if (t instanceof InterruptedException) {
return true;
}
if (t.getCause() != null) {
return isInterruptedException(t.getCause());
}
return false;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... on-java-25
Как запустить structuredTaskScope.timeOutexception на Java 25 ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Журнал регистрации: доступность MDC в вилках, созданных внутри StructuredTaskScope.
Anonymous » » в форуме JAVA - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-