Open DidierLoiseau opened 5 years ago
It also seems like if you have instrumented your code it will always give:
WARN com.ea.async.Async - Warning: Illegal call to await, the method invoking await must return a CompletableFuture
I am not sure if the else
part should have been something like below instead
if (!InitializeAsync.isRunning()) {
warning = "Warning: Illegal call to await, static { Async.init(); } must be added to the main program class and the method invoking await must return a CompletableFuture";
} else if (!(future instanceof CompletableFuture)) {
warning = "Warning: Illegal call to await, the method invoking await must return a CompletableFuture";
}
@TryingToImprove if you have properly instrumented your code, the call to await()
is removed, so you shouldn't get a warning.
Getting this warning, too, despite initialized directly in the main method with Await.init().
I am seeing this, too, even while my code (under test) runs as expected. Would a reproducer be helpful?
If you forget to instrument the code, the wrong warning message is printed:
instead of
As shown by the following simple example:
This is because calling
InitializeAsync.isRunning()
triggers the class initialization, and only enters that method onceisRunning = true
. The only ways to haveisRunning()
returning false is if either the initialization crashes or if called from multiple threads.In addition, I think it would be better to throw an exception than calling
join()
. In the above example this causes a deadlock, and you don't know which method it is referring to.