C# haben eine coole neue FunktionUnterschiede zwischen C# async und Java ExecutorService
public Task<string> async f()
{
string r = LongCompute();
return r;
}
aber ist das nicht gleichbedeutend mit
public Future<String> f() {
return Globals.executorService.submit(new Callable<String>() {
public String call() throws Exception {
String r = longCompute();
return r;
}
});
}
wo in Java Sie mehr Flexibilität haben den Threadpool zu wählen, in dem Die Aufgabe würde ausgeführt werden.
Was erwarten über? Es ist gleichbedeutend mit nur erhalten Aufruf
string s = await f();
ist wie
String s = f().get();
Gibt es etwas zu C#, oder ist es in der Tat nur ein syntaktischer Zucker in der Java-Version? (Ich bin kein C# Guru, also könnte ich etwas verpassen).
Meinten Sie 'string r = erwarten LongCompute();'? Wenn nicht, dann ist Ihre Methode überhaupt nicht asynchron (und der Compiler wird Ihnen dies in Form einer Warnung mitteilen). – svick
@svick der Methode Körper wird nicht, aber der Aufrufer der Methode wird. –
Nein, wird es nicht. Wenn Sie 'f' (f ')' aufrufen, wird es genau so umgeschrieben, wie Jon in seiner Antwort erklärt hat, aber es wird immer noch vollständig synchron laufen. Das liegt daran, dass das Ausführen von Dingen asynchron einen gewissen Overhead verursacht und das Framework versucht, es nach Möglichkeit zu vermeiden. So läuft zum Beispiel jeder Code in einer 'async'-Methode vor dem ersten' '' '' synchron. – svick