2012-11-22 11 views
7

का उपयोग करता है। मैं एक "क्लासिक" एसिंक्रोनस विधि को परिवर्तित करने की कोशिश कर रहा हूं जो एक async/await विधि में कॉलबैक का उपयोग करता है।एक "क्लासिक" एसिंक्रोनस विधि को कनवर्ट/लपेटें जो कॉलबैक

इस कोड है:

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

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

कहाँ "data" एक UserState है, और authClient_LoginCompleted कॉलबैक है।

मेरे पास पहले से ही एसिंक/प्रतीक्षा विधियों के लिए तर्क है, समस्या यह है कि माइक्रोसॉफ्ट के साथ विंडोज फोन में बातचीत। लाइव कॉलबैक का उपयोग करता है। मैं सैमफोर का उपयोग करके एक समाधान पर विचार कर रहा हूं, ताकि मेरे पास तर्क बदल न सके। यह एक अच्छा विकल्प हो सकता है?

उत्तर

10

यदि आपको Task एस में एसिंक्रोनस कॉलबैक लपेटने की आवश्यकता है, तो आप TaskCompletionSource<T> का उपयोग कर सकते हैं। MSDN has the full details

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

यह लिंक TaskCompletionSource की useges को समझने के लिए बहुत उपयोगी है: http://blog.galasoft.ch/archive

हालांकि, आपके मामले में, तुम बस LoginAsyncUserState पैरामीटर के बिना उपयोग कर सकते हैं /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 = गूगल + रीडर – user1845148

संबंधित मुद्दे