des questions similaires:
- De modèle pour l'emballage Asynchrone fonction JavaScript pour le rendre synchrone
- Habillage d'une méthode asynchrone synchrone en C#
J'ai un objet avec une méthode que je voudrais exposer à la bibliothèque de clients (en particulier les scripts clients) comme quelque chose comme:
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
}
mais la primitive "trucs" dont je dispose est un ensemble de event-driven classes:
interface BazComputationSink
{
public void onBazResult(Baz result);
}
class ImplementingThing
{
public void doSomethingAsync(Foo fooArg, Bar barArg, BazComputationSink sink);
}
où ImplementingThing prend entrées, n'certains arcanes des trucs comme enqueueing choses sur une tâche de la file d'attente, et puis plus tard, lorsqu'un résultat se produit, sink.onBazResult()
est appelée sur un thread qui peut ou peut ne pas être le même thread que ImplementingThing.doSomethingAsync() a été appelé.
Est il possible que je peux utiliser l'événement piloté par les fonctions que j'ai, le long de la simultanéité des primitives, à mettre en œuvre MyNiceInterface donc scripts clients peut être heureux d'attendre sur un blocage de fil?
edit: puis-je utiliser FutureTask pour cela?