将异步计算包装到同步(阻塞)计算中
2022-08-31 20:31:16
类似问题:
我有一个对象,我想向库客户端(特别是脚本客户端)公开一个方法,如下所示:
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);
}
其中EnprehensiingThing接受输入,做一些神秘的事情,比如在任务队列上排队,然后当结果发生时,在一个线程上被调用,该线程可能与ImportingThingThing.doSomethingAsync()调用的线程相同,也可能不同。sink.onBazResult()
有没有办法使用我拥有的事件驱动函数以及并发基元来实现MyNiceInterface,以便脚本客户端可以愉快地等待阻塞线程?
编辑:我可以使用FutureTask吗?