Ich versuche, einige bestehende APM-Aufrufe zu verpacken ( BeginX
, EndX
) in Tasks
um in den Genuss aller Vorteile zu kommen. Leider sind unsere Methoden unkonventionell und verwenden out
Parameter und kann daher nicht die Standard FromAsync
Methode, bei der Sie ihm sowohl den Anfangs- als auch den Enddelegierten geben und ihn schön einpacken lassen.
Dieser Artikel beschreibt die Alternative: eine Überladung, die eine IAsyncResult
und erfordert nur die Implementierung des End-Callbacks. Sie nehmen die IAsyncResult
Handle, warten Sie dann, bis es abgeschlossen ist, und rufen Sie dann den Delegaten auf, den Sie übergeben haben.
Das schien in Ordnung zu sein, aber dann las ich ein weiterer Artikel über das Einbinden von APM-Aufrufen in Aufgaben . Er erwähnt auch, dass die IAsyncResult
Überlastung ist nicht so effizient wie die anderen Methoden. Es scheint mir, dass dies bedeutet, dass der Rückruf nicht verwendet wird, um den Abschluss der Methode zu melden. Das bedeutet, dass sie die AsyncWaitHandle
oder Umfragen IsCompleted
. Welches verwenden sie? Wie hoch ist der Leistungsverlust?
Wenn es eine Abfrage durchführt, bedeutet dies, dass der Rückruf möglicherweise nicht sofort erfolgt und die Mitarbeiter während des gesamten Gesprächs damit beschäftigt sind, die Daten zu überprüfen. Wenn sie einen AsyncWaitHandle
Wenn ich eine asynchrone Methode verwende, gibt es einen weiteren Thread, der auf das Ergebnis wartet, was für mich den Sinn einer asynchronen Methode völlig zunichte macht.
Weiß jemand, was sie tun und wie schwerwiegend diese Leistungseinbußen sind?