Информация об изменениях

Сообщение Re[26]: Киллер фича JDK 21 - virtual threads от 11.05.2023 13:02

Изменено 11.05.2023 13:21 ·

Re[26]: Киллер фича JDK 21 - virtual threads
Здравствуйте, Serginio1, Вы писали:

S>·>Упрости его своим Task, коли обещал.

S> Этот код частный случай.
Соврал ты, короче. Проще не получается.
Любой кусок кода — это частный случай.

S>А вот теперь мне надо запустить несколько чтений и прервать все есть один из них вызвал исключение?

Это никакого отношения к сабжу не имеет. Но в качестве ликбеза:

S>https://learn.microsoft.com/ru-ru/dotnet/standard/asynchronous-programming-patterns/consuming-the-task-based-asynchronous-pattern#whenallorfirstexception

А думаешь откуда это появилось в дотнете? Они же слизали CompletableFuture, которое было доступно ещё лет ~10 назад, хреново как-то слизали, код — жуть. Вот более вменяемый аналог:
<T> CompletableFuture<List<T>> WhenAllOrFirstException(CompletableFuture<T>... tasks) 
{
    CompletableFuture<Void> all = CompletableFuture.allOf(tasks);
    Stream.of(tasks).forEach(t -> t.exceptionally(ex -> 
    {
        all.completeExceptionally(ex);
        return null;
    }));
    return all.thenApply(x -> Stream.of(tasks).map(f -> f.join()).toList());
}
Re[26]: Киллер фича JDK 21 - virtual threads
Здравствуйте, Serginio1, Вы писали:

S>·>Упрости его своим Task, коли обещал.

S> Этот код частный случай.
Соврал ты, короче. Проще не получается.
Любой кусок кода — это частный случай.

S>А вот теперь мне надо запустить несколько чтений и прервать все есть один из них вызвал исключение?

Это никакого отношения к сабжу не имеет. Но в качестве ликбеза:

S>https://learn.microsoft.com/ru-ru/dotnet/standard/asynchronous-programming-patterns/consuming-the-task-based-asynchronous-pattern#whenallorfirstexception

А думаешь откуда это появилось в дотнете? Они же слизали CompletableFuture, которое было доступно ещё лет ~10 назад, хреново как-то слизали, код — жуть. Вот более вменяемый аналог:
<T> CompletableFuture<List<T>> WhenAllOrFirstException(CompletableFuture<T>... tasks) 
{
    var all = CompletableFuture.allOf(tasks);
    Stream.of(tasks).forEach(t -> t.exceptionally(ex -> 
    {
        all.completeExceptionally(ex);
        return null;
    }));
    return all.thenApply(x -> Stream.of(tasks).map(f -> f.join()).toList());
}