похожие вопросы:
- Шаблон для переноса асинхронной функции JavaScript, чтобы сделать ее синхронной
- Синхронное завершение асинхронного метода в С#
У меня есть объект с методом, который я хотел бы представить клиентам библиотеки (особенно клиентам сценариев) как что-то вроде:
interface MyNiceInterface
{
public Baz doSomethingAndBlock(Foo fooArg, Bar barArg);
public Future<Baz> doSomething(Foo fooArg, Bar barArg);
// doSomethingAndBlock is the straightforward way;
// doSomething has more control but deals with
// a Future and that might be too much hassle for
// scripting clients
}
но примитивный "материал", который у меня есть, представляет собой набор управляемых событиями классов:
interface BazComputationSink
{
public void onBazResult(Baz result);
}
class ImplementingThing
{
public void doSomethingAsync(Foo fooArg, Bar barArg, BazComputationSink sink);
}
где ImplementingThing принимает входные данные, выполняет некоторые непонятные вещи, такие как постановка в очередь задач в очереди задач, а затем, когда возникает результат, sink.onBazResult()
в потоке, который может быть или не быть тем же потоком, что ImplementingThing.doSomethingAsync() назывался.
Есть ли способ, которым я могу использовать функции, управляемые событиями, которые у меня есть, наряду с примитивами параллелизма, для реализации MyNiceInterface, чтобы клиенты сценариев могли счастливо ждать в блокирующем потоке?
редактировать: я могу использовать FutureTask для этого?