2012-10-14 13 views
9

Ho iniziato a utilizzare .NET4.5 per async e attendere. Tutti gli esempi sembrano utilizzare la seguente per simulare un'operazione a lungo termine:Uso async e attesa con System.Threading.Thread.Sleep

await Task.Delay(3000); 

Ora i miei calcoli a lungo termine sono molto simili a:

System.Threading.Thread.Sleep(3000) 

ad esempio:

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

Come fare Faccio questo lavoro con async e attendo? Ora sembra che io possa 'solo' usare metodi come richieste web, WCF, ecc. Con questo fantastico nuovo metodo.

Dove mi manca il punto?

+0

Che cosa si intende per "i miei calcoli a lungo termine sono molto simili a' Thread.Sleep'"? Non immagino che * davvero * dormano. –

+0

No intendo, stanno bloccando, come il ciclo for? Quello che sostanzialmente cerco di ottenere è aspettare un lungo ciclo. – Enrico

+0

Forse sarebbe meglio dire che la durata potrebbe essere approssimata usando la funzione .Sleep (3000) invece di dire che i tuoi calcoli sono veramente simili a? – HansLindgren

risposta

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

avrebbe funzionato, ma è piuttosto inutile

+0

Sì, ma è esattamente ciò di cui avevo bisogno. Posso sostituire Thread. Dormire con la funzione di blocco e funziona !! Grazie, sembra una domanda stupida, ma mi aiuta. – Enrico

+1

Dici che non ha senso, non mi aiuterebbe in una funzione asincrona che normalmente bloccherebbe. Se lo fai scontroso, il tuo thread può andare fuori e fare altro lavoro. Sto parlando in particolare con l'esecuzione in IIS. – Zapnologica