Comment puis-je utiliser F #' s support intégré pour les classes d'opérations async exposant la Event-based Asynchronous Pattern tels que classe WebClient?Utilisation F # 's support intégré async avec * méthodes Async()
let Download(url : Uri) =
let client = new WebClient()
let html = client.DownloadString(url)
html
Lorsque j'essaie de changer cela pour utiliser "let!" dans un async bloc (par exemple tel que décrit au cours des dernières années Soma post)
let Download(url : Uri) =
async {
let client = new WebClient()
let! html = client.DownloadStringAsync(url)
return html }
Je reçois un message d'erreur:
incompatibilité de type de contrainte. L'unité de type est incompatible avec le type Async < 'a> Le type 'unité' est pas compatible avec le type' Async < 'a>'
Edit: Je suis vraiment poser des questions sur la question générale de l'utilisation * Async() méthodes, WebClient est juste un exemple facile. Microsoft says "... vous devriez exposer des fonctionnalités asynchrones en utilisant le modèle asynchrone basé sur les événements [par opposition à BeginFoo()/EndFoo()] chaque fois que possible ..." donc je pense qu'il devrait y avoir un moyen facile de consommer arbitrairement * Async() méthode de F #.
Alors comment ce problème - en utilisant une méthode * Async() - serait-il traité en général? Est-ce que je dois écrire une méthode d'extension F # à chaque fois? –
Plus maintenant: http://msdn.microsoft.com/fr-fr/library/ms228966.aspx "... vous devez exposer des fonctions asynchrones en utilisant le modèle asynchrone basé sur les événements autant que possible ..." –