Sto cercando di implementare un modello che ho letto dal blog di Don SymeAsync.Parallel o Array.Parallel.Map?
che suggerisce che ci sono opportunità di miglioramento enormi prestazioni da leveraging I/O asincrono. Attualmente sto cercando di prendere un pezzo di codice che "funziona" in un modo, usando Array.Parallel.Map, e vedere se riesco in qualche modo a ottenere lo stesso risultato usando Async.Parallel, ma davvero non capisco Async.Parallel, e non riesco a far funzionare nulla.
Ho un pezzo di codice (di seguito semplificato per illustrare il punto) che recupera correttamente una serie di dati per un cusip. (Una serie di prezzo, ad esempio)
let getStockData cusip =
let D = DataProvider()
let arr = D.GetPriceSeries(cusip)
return arr
let data = Array.Parallel.map (fun x -> getStockData x) stockCusips
Quindi questo approccio costrutti un array di array, facendo un collegamento via Internet al mio fornitore di dati per ogni stock (che potrebbe essere fino a 3000) e mi ritorna una serie di matrici (1 per azione, con una serie di prezzi per ciascuna). Ovviamente non capisco cosa succede sotto Array.Parallel.map, ma mi chiedo se questo è uno scenario in cui ci sono risorse sprecate sotto il cofano, e in realtà potrebbe essere più veloce usando l'I/O asincrono? Quindi, per verificarlo, ho provato a fare questa funzione usando asyncs, e penso che la funzione seguente segua lo schema nell'articolo di Don Syme usando gli URL, ma non verrà compilato con "let!".
let getStockDataAsync cusip =
async { let D = DataProvider()
let! arr = D.GetData(cusip)
return arr
}
L'errore che ottengo è: 'let' Questa espressione è stata dovrebbe avere tipo Async < 'a> ma qui è di tipo obj
Si compila bene con 'lasciare' invece di, ma Avevo pensato che il punto era che hai bisogno del punto esclamativo perché il comando possa girare senza bloccare un thread.
Quindi la prima domanda è, cosa c'è di sbagliato con la mia sintassi sopra, in getStockDataAsync, e poi a un livello più alto, qualcuno può offrire qualche informazione aggiuntiva sull'I/O asincrono e se lo scenario che ho presentato trarrebbe beneficio da esso , rendendolo potenzialmente molto, molto più veloce di Array.Parallel.map? Grazie mille.
Grazie per la spiegazione dettagliata. E 'stato molto utile. – user297400