Сообщение Re[41]: Можно ли избавиться от async|await? от 21.12.2025 13:37
Изменено 21.12.2025 14:09 Serginio1
Re[41]: Можно ли избавиться от async|await?
Здравствуйте, ·, Вы писали:
Вот смотрю я на асинхронное программирование в Яве
Асинхронные задачи FutureTask. Callable и Future
Или
На C# будет типа такого
)
В JavaScript пришли к тому, что await значительно лучше чем создание цепочек обратных вызовов
CompletableFuture и промисы. Обработка результата асинхронных задач
Вот смотрю я на асинхронное программирование в Яве
Асинхронные задачи FutureTask. Callable и Future
import java.util.concurrent.*;
class Program{
public static void main(String[] args) {
System.out.println("Main thread started...");
int number = 5; // исходное число для вычисления факториала
// определяем задачу, которая вычисляет факториал
Callable<Integer> task = () -> {
int n = number; // копируем число, чтобы не изменять его
int result = 1;
while(n > 0) result *= n--;
return result; // возвращаем результат задачи
};
// определяем задачу, которая будет выполнена в будущем
var futureTask = new FutureTask<Integer>(task);
// создаем и запускаем поток
var t = new Thread(futureTask); // futureTask - это объект Runnable
t.start();
// здесь могут быть какие-либо другие операции метода main
// которые должны выполняться одновременно с futureTask
System.out.println("Main thread works...");
try{
// ожидаем выполнения задачи
Integer factorial = futureTask.get();
System.out.printf("factorial of %d is %d\n", number, factorial);
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
System.out.println("Main thread finished...");
}
}Или
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(task);
// передаем в thenAccept обратный вызов
future.thenAccept(result -> System.out.printf("factorial of %d is %d\n", number, result));
// future.thenAccept - не блокирует основной поток
// и одновременно мы можем выполнять в основном потоке некоторую работу
System.out.println("Main thread works...");
Thread.sleep(2000);
System.out.println("Main thread finished...");На C# будет типа такого
Task<int> task= Task.Run(()=>
{
int n = number; // копируем число, чтобы не изменять его
int result = 1;
while(n > 0) result *= n--;
return result; // возвращаем результат задачи
};
// здесь могут быть какие-либо другие операции метода main
// которые должны выполняться одновременно с futureTask
try{
var res = await task; // или в синхронном варианте int res = task.Result;
}
catch(Exception ex){
Console.WriteLine(ex.ToString());
})
В JavaScript пришли к тому, что await значительно лучше чем создание цепочек обратных вызовов
CompletableFuture и промисы. Обработка результата асинхронных задач
Re[41]: Можно ли избавиться от async|await?
Здравствуйте, ·, Вы писали:
Вот смотрю я на асинхронное программирование в Яве
Асинхронные задачи FutureTask. Callable и Future
Или
На C# будет типа такого
)
В JavaScript, под влиянием TypeScript пришли к тому, что await значительно лучше чем создание цепочек обратных вызовов
CompletableFuture и промисы. Обработка результата асинхронных задач
Вот смотрю я на асинхронное программирование в Яве
Асинхронные задачи FutureTask. Callable и Future
import java.util.concurrent.*;
class Program{
public static void main(String[] args) {
System.out.println("Main thread started...");
int number = 5; // исходное число для вычисления факториала
// определяем задачу, которая вычисляет факториал
Callable<Integer> task = () -> {
int n = number; // копируем число, чтобы не изменять его
int result = 1;
while(n > 0) result *= n--;
return result; // возвращаем результат задачи
};
// определяем задачу, которая будет выполнена в будущем
var futureTask = new FutureTask<Integer>(task);
// создаем и запускаем поток
var t = new Thread(futureTask); // futureTask - это объект Runnable
t.start();
// здесь могут быть какие-либо другие операции метода main
// которые должны выполняться одновременно с futureTask
System.out.println("Main thread works...");
try{
// ожидаем выполнения задачи
Integer factorial = futureTask.get();
System.out.printf("factorial of %d is %d\n", number, factorial);
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
System.out.println("Main thread finished...");
}
}Или
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(task);
// передаем в thenAccept обратный вызов
future.thenAccept(result -> System.out.printf("factorial of %d is %d\n", number, result));
// future.thenAccept - не блокирует основной поток
// и одновременно мы можем выполнять в основном потоке некоторую работу
System.out.println("Main thread works...");
Thread.sleep(2000);
System.out.println("Main thread finished...");На C# будет типа такого
Task<int> task= Task.Run(()=>
{
int n = number; // копируем число, чтобы не изменять его
int result = 1;
while(n > 0) result *= n--;
return result; // возвращаем результат задачи
};
// здесь могут быть какие-либо другие операции метода main
// которые должны выполняться одновременно с futureTask
try{
var res = await task; // или в синхронном варианте int res = task.Result;
}
catch(Exception ex){
Console.WriteLine(ex.ToString());
})
В JavaScript, под влиянием TypeScript пришли к тому, что await значительно лучше чем создание цепочек обратных вызовов
CompletableFuture и промисы. Обработка результата асинхронных задач