Ich habe versucht, Async-Methoden zu lesen, und versuche nun, meine eigene Async-Methode zu erstellen. Die Methode ist ein Webservice-Aufruf, der eine Liste von Fehlerprotokollen zurückgibt. Ich bin mir nicht sicher, ob ich es richtig verstanden habe, also dachte ich, ich würde meinen Code teilen, um zu sehen, ob ich etwas anderes machen sollte.Erstellen einer asynchronen Webservice-Methode
Ich möchte nur, dass der Code eine Liste von Fehlerprotokollen zurückgibt, indem eine Methode aufgerufen wird GetAllErrorLogs(), das ist eine synchronisierte Methode. Da es eine Sekunde dauern kann, um alle Fehlerprotokolle zu holen, möchte ich die Möglichkeit haben, andere Dinge zu tun, sobald ich die GetAllErrorLogs() Methode aufgerufen habe. Hier ist der Code.
[WebMethod]
public async Task<List<ErrorLog>> GetAllErrorLogs()
{
List<ErrorLog> errorLogs = new List<ErrorLog>();
await System.Threading.Tasks.Task.Run(() => {
errorLogs = ErrorLogRepository.GetAllErrorLogs();
});
if (errorLogs == null)
return new List<ErrorLog>();
return errorLogs;
}
Vielen Dank!
Ich habe nicht viel Vorteil mit Asynchron/warten auf der Serverseite sehen. Sie verwenden nur mehr Threads für die gleiche Sache. – I4V
@ I4V: 'async' auf der Serverseite kann die Anzahl der Threads, die pro Anfrage verwendet werden, dramatisch reduzieren * (unter der Annahme, dass der Code von Natur aus asynchron und nicht fälschungsasynchron ist wie' Task.Run'). Als Ergebnis können asynchrone Server viel besser skalieren, oft in der Größenordnung von 10-100x. –
Stephan Cleary hat Recht ... Ich habe an einem Trainingskurs auf einem Microsoft-Campus teilgenommen, wo uns gesagt wurde, dass Sie durch die asynchrone Ausführung des gesamten auf Ihrem Server ausgeführten Codes massive Kapazitätserweiterungen für die gleiche Hardware erhalten würden. Nur weil eine Methode auf eine Antwort von einem Unteraufruf wartet, wird der Hauptthread freigegeben, um andere Arbeiten auszuführen ... dh mit anderen gleichzeitigen Webanforderungen umzugehen. Der Vorteil ist Multitasking. – GPR