L'implementazione asincrona in C# 4.5 è esattamente la stessa di F # 2 nel modo in cui vengono utilizzati i thread?È asincrono in C# la stessa implementazione di F #?
risposta
Sono diversi. La differenza principale è che C# utilizza standard .NET Task<T>
per rappresentare calcoli asincroni mentre F # utilizza il proprio tipo chiamato Async<T>
.
Più in particolare, le differenze principali sono:
AC metodo # asincrono crea un
Task<T>
che viene subito iniziato (caldo compito modello), mentre F # crea un calcolo che è necessario avviare in modo esplicito (generatore modello). Ciò significa che le computazioni F # sono più facili da comporre (puoi scrivere astrazioni di livello superiore).In F # si ottiene anche un controllo migliore su come è iniziata la computazione. Puoi iniziare un calcolo utilizzando
Async.Start
per avviarlo in background oAsync.StartImmediate
per avviarlo sul thread corrente.F flussi di lavoro # asincroni sostenere cancellazione automaticamente, in modo da non dover passare
CancellationToken
intorno.Forse un'altra conseguenza del primo punto è che F flussi di lavoro # asincrone supportano anche la coda-ricorsione, in modo da poter scrivere i flussi di lavoro ricorsive (questo non sarebbe lavorare facilmente in C#, ma C# non usare questo stile di programmazione)
ho scritto un articolo più dettagliato su questo argomento: Asynchronous C# and F# (II.): How do they differ?
- 1. implementazione C# EventHandlers in F #
- 2. F # Flusso di lavoro asincrono
- 3. Implementazione di un iteratore asincrono
- 4. Implementazione di polling lungo in modo asincrono
- 5. implementazione callback asincrono n-1
- 6. Qualsiasi implementazione R-Tree in F # (o C#)?
- 7. Implementazione di un servizio WCF asincrono
- 8. Qual è lo scopo di extra ldnull e tail. in F # implementazione vs C#?
- 9. Errore POST asincrono su WP7 e F #
- 10. Un problema di implementazione di F # Seq
- 11. Modificatore asincrono in C#
- 12. Resa F #! operatore - Implementazione ed eventuali equivalenti C#
- 13. perché "f = f ++" non è sicuro in c?
- 14. F #: implementazione di un'interfaccia con membri sovraccaricati
- 15. Modelli per mescolare F # e C# nella stessa soluzione
- 16. Costruttore asincrono in C++ 11
- 17. generica implementazione in C
- 18. Qual è la precisione predefinita di c printf% f?
- 19. Implementazione di un metodo asincrono in Python DBus
- 20. Interfaccia di implementazione C#
- 21. Implementazione di MVar in C?
- 22. Implementazione di RAII in C#
- 23. implementazione di logsumexp in C?
- 24. Esistono progetti di implementazione alternativi (non- .Net) F #?
- 25. Come definire diversi tipi per la stessa classe in C++
- 26. resa Implementazione in C
- 27. Implementazione di C++ equivalente di C# usando la dichiarazione
- 28. playframework è veramente asincrono?
- 29. C# La chiamata è ambigua tra le seguenti metodi o proprietà: F (doppio)' e 'F (decimale)'
- 30. Mystical "F colon" in C#
Grazie mille! Ma come vengono utilizzati i fili sotto il cofano? Don Syme sottolinea nel suo libro 'Expert F #' che F # usa il thread hopping. È lo stesso per C# o ci sono alcune differenze? – Andries
In F #, quando si avvia su un thread con specifico 'SynchronizationContext' (cioè il thread GUI), il calcolo asincrono ritorna a questo' SynchronizationContext'. Non sono riuscito a trovare una documentazione che dicesse come questo si comporta in C#, ma i miei esperimenti dimostrano che si comporta allo stesso modo - cioè, se si avvia 'await'ing su un thread GUI, il resto del calcolo verrà eseguito sul thread GUI (anche se la computaiton che stai aspettando esegue la continuazione su un altro thread). –
@TomasPetricek Ancora una volta - ottime informazioni su F #. –