2012-10-14 17 views
9

Zacząłem używać .NET4.5 dla async i czekam. Wszystkie przykłady wydają się korzystać z następujących symulować długie działanie wyrażenia:Korzystanie z async i czekanie z System.Threading.Thread.Sleep

await Task.Delay(3000); 

Teraz moje długie obliczenia okresie są bardzo podobne do:

System.Threading.Thread.Sleep(3000) 

na przykład:

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

Jak zrobić Robię to z asynchronicznym i oczekuję? Teraz wydaje mi się, że mogę "tylko" używać takich metod, jak webrequests, WCF itp. Dzięki tej wspaniałej nowej metodzie.

Gdzie brakuje mi punktu?

+0

Co masz na myśli przez „moje długie obliczenia określony są bardzo podobne do' Thread.Sleep'”? Nie wyobrażam sobie, że naprawdę śpią. –

+0

Nie mam na myśli, że są blokowane, jak pętla for? Co zasadniczo próbuję osiągnąć, to czekać na długą pętlę. – Enrico

+0

Prawdopodobnie byłoby lepiej powiedzieć, że czas trwania może być przybliżony za pomocą funkcji .Sleep (3000) zamiast stwierdzenia, że ​​twoje obliczenia są naprawdę podobne do? – HansLindgren

Odpowiedz

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

będzie działać, ale to raczej bezcelowe

+0

Tak, ale jest dokładnie to, czego potrzebowałem. Mogę zastąpić Thread.Sleep funkcją blokującą i działa! Dzięki, wydaje się głupie pytanie, ale mi pomaga. – Enrico

+1

Mówisz, że nie ma sensu, czy nie pomogłoby to w funkcji asynchronicznej, która normalnie byłaby blokowana. Jeśli zrobisz to głupio, twoja nić może odpaść i wykonać inną pracę. Mówię konkretnie z uruchomieniem w IIS. – Zapnologica