Travailler avec le Système.Le filetage.Les tâches.Tâche<Flux> au lieu de Flux
J'ai été en utilisant la méthode ci-dessous sur les versions précédentes de la WCF API Web:
//grab the posted stream
Stream stream = request.Content.ContentReadStream;
//write it to
using (FileStream fileStream = File.Create(fullFileName, (int)stream.Length)) {
byte[] bytesInStream = new byte[stream.Length];
stream.Read(bytesInStream, 0, (int)bytesInStream.Length);
fileStream.Write(bytesInStream, 0, bytesInStream.Length);
}
Mais sur l'extrait 6, HttpRequestMessage.Content.ContentReadStream
propriété est allé. Je crois qu'il devrait maintenant ressembler à celui-ci:
//grab the posted stream
System.Threading.Tasks.Task<Stream> stream = request.Content.ReadAsStreamAsync();
Mais je n'arrivais pas à comprendre ce que le reste du code devrait ressembler à l'intérieur de la à l'aide de l'instruction. Quelqu'un peut-il me fournir un moyen de le faire?
- ne connaissant rien au sujet de l'API de web, l'approche rapide et sale serait
Stream stream = request.Content.ReadAsStreamAsync().Result
et puis, comme avant... - annonce de travail. pouvez-vous fournir la meilleure approche ici aussi?
- ajout d'une réponse...
- Je suis en supposant que cela a été posté avant
async
etawait
.
Vous devez vous connecter pour publier un commentaire.
Vous pourriez avoir à régler cette fonction sur ce code qui se passe avant et après, et il n'y a pas d'erreur de manipulation, mais quelque chose comme ceci:
Si, plus tard dans votre code, vous devez vous assurer que ce est terminé, vous pouvez appeler
task.Wait()
et il permet de bloquer jusqu'à ce qu'il est terminé (ou levée d'une exception).Je recommande fortement de Stephen Toub du Les modèles de Programmation Parallèle de se lever à la vitesse sur certains des nouveaux async modèles (tâches, le parallélisme de données etc).NET 4.
task.Wait()
pour s'assurer que la tâche est terminée. Tout changement que je peut faire référence à une fonction de rappel ici? Si oui, pouvez-vous donner un exemple, si je ne suis pas trop en demander. Ce que je fais, une fois que ce code est de travailler sur le fichier téléchargé. car la tâche n'est pas terminée, j'ai eu Système.IO.FileNotFoundException :sasync
etawait
. - Il vraiment simplifie le code.Rapide et sale correctif:
Être conscient que le fait que la synchronisation de la version a été supprimée à partir de l'API suggère que vous devriez vraiment essayer d'apprendre la nouvelle async paradigmes pour éviter d'engloutir le nombre de threads sous forte charge.
Vous pourriez par exemple:
ou avec de nouveaux async attendent caractéristiques:
Prendre le temps d'apprendre async/await. C'est assez pratique.
Ici est de savoir comment vous pouvez faire mieux avec
async
etawait
: