2015-09-29 13 views
6

Ci sono alcuni metodi piuttosto convenienti nella classe File, come ReadAll***/WriteAll***/AppendAll***.Dove sono i metodi Async FIle.ReadAll *** Async/WriteAll *** Async/AppendAll *** Async?

Sono di fronte a un numero di casi, quando ho bisogno delle loro controparti asincrone, ma semplicemente non esistono.

Perché? Ci sono delle insidie?
So che questi metodi potrebbero essere facilmente implementati, ma c'è qualche ragione per non implementarli nel framework out-of-the-box?

+0

Downvoter, qualche spiegazione? – Dennis

+0

Probabilmente non capisco la tua domanda, ma non è abbastanza? 'static async Task WriteAllTextAsync (percorso stringa, contenuto stringa) {attende Task.Run (() => File.WriteAllText (percorso, contenuto)); } ' –

+3

@codroipo: si chiama" asincrona sulla sincronizzazione "e deve essere evitato. Vedi questo articolo, ad esempio: http://blog.stephencleary.com/2013/10/taskrun-etiquette-and-proper-usage.html – Dennis

risposta

4

"... Ho bisogno delle loro controparti asincrone, ma semplicemente non esistono. Perché?"

Tutti i XXXAsync metodi che sono stati aggiunti al framework .Net con async-await (esclusi nuove librerie sviluppate con asincrono in mente) sono semplicemente involucri intorno BeginXXX/EndXXX.

Non hanno aggiunto nuove operazioni asincrone, hanno semplicemente convertito quelle vecchie in nuove attività basate su attività. Per esempio, questo è UdpClient.SendAsync:

public Task<int> SendAsync(byte[] datagram, int bytes) 
{ 
    return Task<int>.Factory.FromAsync(BeginSend, EndSend, datagram, bytes, null); 
} 

Dato che non ci sono File.BeginReadAll e File.EndReadAll è comprensibile che non c'è File.ReadAllAsync.

Ci sono delle insidie?

L'unico problema con l'implementazione di questi metodi è farlo in modo veramente asincrono e non simulare asincronizzazione.

+1

Quindi, per riformulare la tua risposta, "eravamo troppo pigri per farlo". :) – Dennis

+0

@Dennis più come se non aggiungessero nuove funzionalità alle vecchie librerie (ma sì ...). – i3arnon