में सिंक्रोनस कॉल लेना मैं WP7 संस्करण में पूर्ण .NET ढांचे से कुछ कोड पोर्ट कर रहा हूं और मैं सिंक्रोनस बनाम एसिंक कॉल के साथ किसी समस्या में भाग रहा हूं।सिल्वरलाइट WP7
string response;
string requestString = GenerateReqString();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create("endpoint");
req.Method = "POST";
req.ContentType = "text/xml";
req.ContentLength = requestString.Length;
StreamWriter sw = new StreamWriter (req.GetRequestStream(), System.Text.Encoding.ASCII);
sw.Write(requestString);
sw.Close();
StreamReader sr = new StreamReader(req.GetResponse().GetResponseStream());
response = sr.ReadToEnd();
sr.Close();
प्रतिक्रिया स्ट्रिंग को तब विधि द्वारा लौटाई गई वस्तुओं की एक सूची में पार्स किया जाता है।
मेरी समस्या यह है कि सिल्वरलाइट/WP7 में कॉल को सिंक्रनाइज़ करने का कोई तरीका नहीं है। अगर मैं कॉल बैक का उपयोग करता हूं तो मुझे एक अलग फ़ंक्शन में प्रतिक्रिया मिल जाएगी और इसे मूल फ़ंक्शन से वापस करने में सक्षम नहीं होगा। क्या कॉल को सिंक्रनाइज़ करने या कॉलबैक फ़ंक्शन से वापस आने के तरीके को एसिंक कॉल से लात मारने का कोई तरीका है?
आइए कहें ProcessWebResponseResult() स्ट्रिंग से एक ऑब्जेक्ट बनाता है और फ़ंक्शन जो DoSomethingAsync() को उस ऑब्जेक्ट को वापस करने की आवश्यकता है। क्या यह संभव है? – CACuzcatlan
उस बिंदु को याद कर रहा है। DoSomethingAsync को कॉल करने वाली विधि DoSomethingAsync को फ़ंक्शन पास करती है। पारित समारोह "इस कार्य के परिणाम के साथ क्या करना है"। जैसा कि आपको और चाहिए, आप अपनी कॉल श्रृंखला में अतिरिक्त निरंतरता फ़ंक्शन जोड़ते हैं। –
इस तरह आप सामान्य रूप से चल रहे कार्यक्रम के बारे में सोचते हैं: 'ए(); बी(); सी(); '। हालांकि, जब आप 'निरंतरता गुजरने वाली शैली' के साथ निष्पादित करते हैं, तो आप प्रत्येक कार्य को बताते हैं कि यह कब किया जाता है। "मुझे इस फ़ंक्शन से मेरा परिणाम मिल गया" के बजाय, आप कहते हैं, "मैं इस कार्य को बताता हूं कि इसके परिणाम के साथ क्या करना है" एक प्रतिनिधि के माध्यम से। –