Укажите контекст для Vert.x Future для их одновременного запускаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Укажите контекст для Vert.x Future для их одновременного запуска

Сообщение Anonymous »

Я новичок в Vert.x и решил попробовать его, надеясь, что он предлагает API Future, аналогичный Scala Future или даже Cats/ZIO IO, но кажется, что я не могу запускать несколько фьючерсов параллельно из моей основной функции. .
Я выяснил, что по умолчанию они запускаются в однопоточном цикле событий, и, похоже, нет способа указать собственный цикл событий (экземпляр Vertx) на будущее
код> для запуска. В своих библиотеках (например, клиенте postgresql) они используют свой внутренний API:

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

ContextInternal current = vertx.getOrCreateContext();
if (pipelined) {
return current.failedFuture("Cannot acquire a connection on a pipelined pool");
}
Promise promise = current.promise();
Но из кода приложения я не могу использовать ContextInternal, только Context. Вот мой код, я взял его из старого вопроса, но немного изменил:

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

package com.example;

import io.vertx.core.*;
import io.vertx.core.impl.ContextInternal;

public class FuturesTest {

static Vertx vertx = Vertx.vertx();
public static long fib(int n) {
long a = 0, b = 1;
for (int i = 1; i < n; i++) {
var x = a;
a = b;
b = x + b;
}
return b;
}
public static Future runTask(String m) {
return Future.future(p -> {
System.out.println("running " + m);
p.complete();
}).map(p -> {
System.out.println("30th fibonacci num is " + fib(30)); //Calling a method that calculates the nth fibonacci
return null;
}).map(p -> {
System.out.println("completed running " + m);
return null;
}).onComplete(p -> System.out.println(m + " completed"));
}

public static void main(String[] args) throws Exception {

var f1 = runTask("Future one");

var f2 = runTask("Future two");

var ff = Future.any(f1, f2).onComplete(ar ->{
if(ar.succeeded()){
System.out.println("All succeeded");
} else {
System.out.println("At least one failed");
}
});

Thread.sleep(5000);
System.out.println("EXIT");
}
}
Как я могу запустить будущее в указанном цикле событий на уровне приложения?
Я пытаюсь добиться этого исключительно с помощью Futures, избегая выполнения ExecutBlocking() или подобных методов, но я не нашел способа изменить цикл событий по умолчанию для использования нескольких потоков. Я не хочу создавать несколько циклов событий, как в этом вопросе, но хочу, чтобы Future запускался в нескольких потоках.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ncurrently
Ответить

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

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

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

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

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