2013-09-16 45 views
12

Tôi hoàn toàn bị nhầm lẫn bởi toàn bộ mẫu await/async trong C#.Đang chờ phương thức không đồng bộ

Tôi có một ứng dụng biểu mẫu và tôi muốn gọi một phương pháp mất 20 giây để thực hiện một tấn xử lý. Do đó tôi muốn await nó. Tôi nghĩ rằng cách chính xác là để đánh dấu nó là async Task nhưng làm điều này tạo ra một cảnh báo bởi vì tôi không sử dụng await bất cứ nơi nào trong đó.

Google tiết lộ điều gì đó về việc trả lại số TaskCompletionSource<T> nhưng tôi không có loại trả lại vì nó không có giá trị.

Tôi làm cách nào để gọi phương thức này bằng cách sử dụng await?

+3

'async' không thực thi phương thức trên chuỗi nền; Tôi có phần giới thiệu ['async'/'await'] (http://blog.stephencleary.com/2012/02/async-and-await.html) mà bạn có thể thấy hữu ích. –

Trả lời

35

Gọi phương pháp của bạn như sau:

await Task.Run(() => YourMethod()); 

Khi bạn sử dụng phương pháp Task.Run nó tạo ra một nhiệm vụ awaitable cho bạn.

+0

Task.Run có chạy "YourMethod" trên chuỗi giao diện người dùng chính hay tạo chuỗi mới không? (ví dụ: WinForms) – harag

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