2012-11-22 25 views
7

Tôi đang cố chuyển đổi phương thức không đồng bộ "cổ điển" sử dụng gọi lại thành phương thức async/await.chuyển đổi/bọc phương thức không đồng bộ "cổ điển" sử dụng gọi lại

Đây là mã:

authClient.LoginCompleted += authClient_LoginCompleted; 
authClient.LoginAsync(new List<string>() { "var1", "var2" }, data); 

static void authClient_LoginCompleted(object sender, LoginCompletedEventArgs e) 
{ ... } 

đâu "data" là một UserState, và authClient_LoginCompleted là gọi lại.

Tôi đã có logic cho một phương pháp không đồng bộ/chờ đợi, vấn đề là sự tương tác trong cửa sổ điện thoại với Microsoft.Live sử dụng gọi lại. Tôi đang xem xét một giải pháp sử dụng semaphore, để không thay đổi logic tôi có. Đó có thể là một lựa chọn tốt?

Trả lời

10

Nếu bạn cần bọc các cuộc gọi lại không đồng bộ vào Task s, thì bạn có thể sử dụng TaskCompletionSource<T>. MSDN has the full details.

Tuy nhiên, trong trường hợp của bạn, bạn có thể chỉ cần sử dụng LoginAsync mà không UserState tham số:

LiveLoginResult result = await authClient.LoginAsync(new[] { "var1", "var2" }); 
+1

Liên kết này là rất hữu ích cho sự hiểu biết useges của TaskCompletionSource: http://blog.galasoft.ch/archive /2013/01/27/using-asyncawait-with-webclient-in-windows-phone-8-or-taskcompletionsource.aspx?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+galasoft+%28Laurent+Bugnion+%28GalaSoft%29%29&utm_content = Google + Reader – user1845148

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