comment utiliser async et await minuterie
Mes fenêtres de l'application sont:
- L'aide de HttpWebRequest obtenir web de requête/réponse toutes les 3 secondes dans un thread.(total est d'environ 10 threads pour faire cette demande web/réponse).
- Chaque thread utiliser des variables globales.
Je veux utiliser un Système.Les minuteries.Minuterie et async et await. Mais je ne sais pas qui est une meilleure façon pour la haute performance. Et puis, comment les tester. Je suis un vert en C#.
Avez-vous pour utiliser la Minuterie? Êtes-vous autorisé à utiliser
C'est ok. Et comment?
vous n'avez pas besoin de créer 10 threads pour faire
Task.Delay()
à la place? Je peux vous montrer un exemple.C'est ok. Et comment?
vous n'avez pas besoin de créer 10 threads pour faire
HttpWebRequest
en parallèle. Utilisation WebRequest.GetResponseAsync
.OriginalL'auteur user2724902 | 2014-03-17
Vous devez vous connecter pour publier un commentaire.
Vous pourriez écrire un
RepeatActionEvery()
méthode comme suit.Ses paramètres sont:
action
- L'action que vous voulez répéter le plus souvent possible.interval
- L'intervalle de temps entre l'appel deaction()
.cancellationToken
- Un jeton que vous utilisez pour annuler la boucle.Voici un compilable console application qui montre comment vous pouvez l'appeler. Pour une application ASP que vous appelez à partir d'un endroit approprié.
Noter que vous avez besoin d'un moyen d'annuler la boucle, ce qui est pourquoi je passe un
CancellationToken
àRepeatActionEvery()
. Dans cet exemple, j'utilise une source d'annulation qui annule automatiquement après 8 secondes. Vous aurait probablement pour fournir une source d'annulation pour laquelle certains autres code appelé.Cancel()
au moment opportun. Voir ici pour plus de détails.Si vous passer le cancellationToken à
Task.Delay()
alors qu'il va jeterTaskCanceledException
si le jeton est annulé, de sorte que vous DEVEZ attraper l'exception.mon mauvais, je m'attendais à un autre comportement de l'annulation de la Tâche.Retard, sans avoir vérifié la msdn, soupir. En tout cas, merci c'est parfaitement logique pour moi maintenant.
OriginalL'auteur Matthew Watson