222 votes

L'équivalent Java de C# async/await ?

Je suis un développeur C# normal mais il m'arrive de développer des applications en Java. Je me demande s'il existe un équivalent Java de C# async/await ? En termes simples, quel est l'équivalent Java de :

async Task<int> AccessTheWebAsync()
{ 
    HttpClient client = new HttpClient();
    var urlContents = await client.GetStringAsync("http://msdn.microsoft.com");
    return urlContents.Length;
}

0voto

Pellet Points 106

Si vous cherchez simplement un code propre qui simule le même effet que async/await en Java et que cela ne vous dérange pas de bloquer le thread sur lequel il est appelé jusqu'à ce qu'il soit terminé, comme dans un test, vous pouvez utiliser quelque chose comme ce code :

interface Async {
    void run(Runnable handler);
}

static void await(Async async) throws InterruptedException {

    final CountDownLatch countDownLatch = new CountDownLatch(1);
    async.run(new Runnable() {

        @Override
        public void run() {
            countDownLatch.countDown();
        }
    });
    countDownLatch.await(YOUR_TIMEOUT_VALUE_IN_SECONDS, TimeUnit.SECONDS);
}

    await(new Async() {
        @Override
        public void run(final Runnable handler) {
            yourAsyncMethod(new CompletionHandler() {

                @Override
                public void completion() {
                    handler.run();
                }
            });
        }
    });

-2voto

JDaly Points 47

Java possède une classe appelée java.util.concurrent.Future ce qui équivaut à la méthode C# Task classe.

Vous pouvez commencer à travailler sur un java.util.concurrent.Executor objet. Il existe de nombreuses implémentations mais ForkJoinTask.fork() vaut le coup d'œil si vous atteignez les limites du fil dès que vous essayez ceci.

Vous recevrez un Future lorsque vous commencez à travailler. Votre méthode va continuer à fonctionner. Lorsque vous avez besoin du résultat de votre Future, vous appelez get() et il se bloquera jusqu'à ce que le résultat soit prêt. Ceci est similaire à l'utilisation de la fonction await en C#.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X