2012-10-14 3 views
9

J'ai commencé à utiliser .NET4.5 pour async et await. Tous les exemples semblent utiliser les éléments suivants pour simuler une opération à long terme:Utiliser async et await avec System.Threading.Thread.Sleep

await Task.Delay(3000); 

Maintenant, mes calculs à long terme sont vraiment similaires à:

System.Threading.Thread.Sleep(3000) 

par exemple:

for(i=0;i<1000000000;i++) 
    i=i*2; 

Comment faire Je fais ce travail avec async et attend? Maintenant, il me semble que je ne peux utiliser que des méthodes comme webrequests, WCF, etc ... avec cette nouvelle méthode.

Où suis-je en train de manquer le point?

+0

Que voulez-vous dire par « mes calculs à long terme sont vraiment similaires à' Thread.Sleep' »? Je ne m'imagine pas qu'ils dorment * vraiment *. –

+0

Non, je veux dire, ils bloquent, comme la boucle for? Ce que j'essaye fondamentalement d'accomplir est d'attendre une longue boucle. – Enrico

+0

Peut-être il serait préférable de dire que la durée pourrait être approximée en utilisant la fonction .Sleep (3000) au lieu de dire que vos calculs sont vraiment similaires à? – HansLindgren

Répondre

17
await Task.Run(() => Thread.Sleep(10000)) 

travaillerait, mais il est plutôt inutile

+0

Oui mais c'est exactement ce dont j'avais besoin. Je peux remplacer le Thread.Sleep avec la fonction de blocage et ça marche !! Merci, semble être une question stupide, mais ça m'aide. – Enrico

+1

Vous dites que c'est inutile, cela ne m'aiderait pas dans une fonction asynchrone qui serait normalement bloquante. Si vous faites cela, votre fil peut partir et faire un autre travail. Im parlant spécifiquement avec courir à l'intérieur d'IIS. – Zapnologica

Questions connexes