Anpassen von .NET 4.5 async an F #

8

Die .NET 4.5-Framework-Bibliotheken integrieren C # -Arbeitsbasiertes Async ziemlich umfassend. In vielen Fällen geben sie weiterhin APM-ähnliche Begin / End-Methodenpaare frei. F # kann beide Methoden problemlos an asynchrone F # -Synchrone Berechnungen anpassen.

Meine Frage ist, gibt es bei einer IO-gebundenen Operation, die im Framework als Anfangs- / Ende- und aufgabenbasiertes Async implementiert ist, einen Leistungs- oder Speichervorteil, wenn Sie bei der Anpassung an F # async einen anderen auswählen?

In .NET 4.5 hat System.IO.Stream sowohl BeginRead und ReadAsync . Das bedeutet, dass ich das tun kann ...

%Vor%

Oder ich kann das tun ...

%Vor%

Gibt es irgendeinen Grund, einen vor dem anderen zu bevorzugen? Der Hauptunterschied, den ich mir vorstellen kann, ist, dass die Leseoperation bereits gestartet wurde, wenn die zweite Erweiterungsmethode zurückkehrt, aber nicht mit der ersten Erweiterungsmethode.

    
Joel Mueller 14.02.2012, 18:56
quelle

1 Antwort

2

Eine AsyncRead Erweiterungsmethode ( implementiert in FromBeginEnd ) ist bereits in FSharp.Core definiert. AwaitTask ist nur ein dünner Wrapper über Task.ContinueWith . Es läuft also auf einen Vergleich von Task und async hinaus - was effizienter ist, oder richtig für den Job. Da Sie mit async s arbeiten, wäre der einzige relevante Unterschied die Leistung. Ich bin kein Experte in diesem Thema, aber ich denke, dass async und Task das gleiche Problem behandeln, wobei Task eine Kante für CPU-gebundene Operationen hat.

BEARBEITEN

Ich habe deine Frage nicht sorgfältig genug gelesen. Ich kenne die definitive Antwort nicht, aber da Task und async ungefähr gleich sind, sehe ich keinen Grund, ein Task mit einem async zu umbrechen, es sei denn, es ist deine einzige Option. Begin/End Methoden sind eine untergeordnete, leichtere Abstraktion und erscheinen daher als bessere Bausteine ​​für async s.

Ein zusätzlicher Gedanke: Die Tatsache, dass AsyncRead nicht geändert wurde, um Task zu verwenden, könnte aufschlussreich sein.

    
Daniel 14.02.2012, 19:44
quelle

Tags und Links