Je suis en train de mettre en œuvre un modèle que je lis sur le blog de Don SymeAsync.Parallel ou Array.Parallel.Map?
ce qui suggère qu'il existe des possibilités d'amélioration massives de performance de tirer parti d'E/S asynchrone. J'essaie actuellement de prendre un morceau de code qui "fonctionne" d'une manière, en utilisant Array.Parallel.Map, et de voir si je peux obtenir le même résultat en utilisant Async.Parallel, mais je ne comprends vraiment pas Async.Parallel, et ne peut rien faire pour travailler.
J'ai un morceau de code (simplifié ci-dessous pour illustrer le point) qui récupère avec succès un tableau de données pour un cusip. (Une série de prix, par exemple)
let getStockData cusip =
let D = DataProvider()
let arr = D.GetPriceSeries(cusip)
return arr
let data = Array.Parallel.map (fun x -> getStockData x) stockCusips
donc cette approche contructs un tableau de tableaux, en faisant une connexion sur Internet à mon fournisseur de données pour chaque stock (qui pourrait être autant que 3000) et me retourne un tableau de tableaux (1 par stock, avec une série de prix pour chacun). Je ne comprends pas ce qui se passe en dessous de Array.Parallel.map, mais je me demande si c'est un scénario où il y a des ressources gaspillées sous le capot, et cela pourrait être plus rapide en utilisant des E/S asynchrones? Donc pour tester cela, j'ai essayé d'utiliser cette fonction en utilisant asyncs, et je pense que la fonction ci-dessous suit le modèle dans l'article de Don Syme utilisant les URL, mais ne compilera pas avec "let!".
let getStockDataAsync cusip =
async { let D = DataProvider()
let! arr = D.GetData(cusip)
return arr
}
L'erreur que je reçois est: "let" Cette expression devait avoir le type Async < « a> mais ici est de type obj
Il compile très bien avec "laisser" au lieu de, mais Je pensais que tout le point était que vous avez besoin du point d'exclamation pour que la commande s'exécute sans bloquer un fil. Donc la première question est: qu'est-ce qui ne va pas avec ma syntaxe ci-dessus, dans getStockDataAsync, puis à un niveau supérieur, quelqu'un peut-il donner un aperçu supplémentaire sur les E/S asynchrones et si le scénario que j'ai présenté en bénéficierait? , ce qui rend potentiellement beaucoup, beaucoup plus rapide que Array.Parallel.map? Merci beaucoup.
Merci pour l'explication détaillée. C'était très utile. – user297400