2012-10-14 38 views
9

Tôi bắt đầu sử dụng .NET4.5 cho async và đang chờ. Tất cả các ví dụ dường như sử dụng những điều sau đây để mô phỏng một hoạt động dài hạn:Sử dụng async và đang chờ với System.Threading.Thread.Sleep

await Task.Delay(3000); 

Bây giờ tính toán lâu dài của tôi là thực sự tương tự như:

System.Threading.Thread.Sleep(3000) 

ví dụ:

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

thế nào Tôi làm công việc này với async và đang chờ đợi? Bây giờ có vẻ như tôi có thể 'chỉ' sử dụng các phương pháp như webrequests, WCF, vv ... với phương pháp mới tuyệt vời này.

Tôi đang thiếu điểm ở đâu?

+0

Ý anh là gì bởi "tính toán lâu dài của tôi là thực sự tương tự cho' Thread.Sleep'"? Tôi sẽ không tưởng tượng họ * thực sự * ngủ. –

+0

Không, ý tôi là, chúng đang chặn, giống như vòng lặp for? Những gì tôi về cơ bản cố gắng đạt được là chờ đợi một vòng lặp dài. – Enrico

+0

Có thể sẽ tốt hơn nếu nói rằng thời lượng có thể xấp xỉ bằng cách sử dụng hàm .Sleep (3000) thay vì nói rằng các phép tính của bạn thực sự tương tự? – HansLindgren

Trả lời

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

sẽ hoạt động, nhưng nó khá vô nghĩa

+0

Có nhưng đó là chính xác những gì tôi cần. Tôi có thể thay thế Thread.Sleep bằng chức năng chặn và nó hoạt động !! Cảm ơn, có vẻ như một câu hỏi ngu ngốc, nhưng nó giúp tôi. – Enrico

+1

Bạn nói rằng nó là vô nghĩa, điều này sẽ không giúp tôi trong một chức năng async mà bình thường sẽ được chặn. Nếu bạn làm điều này chắc chắn sợi của bạn có thể đi ra và làm công việc khác. Im nói cụ thể với việc chạy bên trong IIS. – Zapnologica

Các vấn đề liên quan