बनाना मैंने एसिंक विधियों को पढ़ने की कोशिश की है और अब मैं अपना स्वयं का एसिंक विधि बनाने की कोशिश कर रहा हूं। विधि एक webservice कॉल है जो त्रुटि लॉग की एक सूची देता है। मुझे यकीन नहीं है कि मैं सही ढंग से समझ गया हूं इसलिए मैंने सोचा कि मैं यह देखने के लिए अपना कोड साझा करूंगा कि मुझे कुछ अलग करना चाहिए या नहीं।एक async webservice विधि
मैं चाहता हूं कि कोड करने के लिए कोड GetAllErrorLogs() पर कॉल करके त्रुटि लॉग की सूची लौटाएं, यह एक सिंक्रनाइज़ विधि है। चूंकि सभी त्रुटि लॉग लाने में एक सेकंड लग सकता है, इसलिए मैं GetAllErrorLogs() विधि कहने के बाद अन्य सामान करने का अवसर प्राप्त करना चाहता हूं। कोड यहाँ है।
[WebMethod]
public async Task<List<ErrorLog>> GetAllErrorLogs()
{
List<ErrorLog> errorLogs = new List<ErrorLog>();
await System.Threading.Tasks.Task.Run(() => {
errorLogs = ErrorLogRepository.GetAllErrorLogs();
});
if (errorLogs == null)
return new List<ErrorLog>();
return errorLogs;
}
धन्यवाद!
मैं बहुत ज्यादा नहीं लाभ async का उपयोग कर देख पा रहे हैं/सर्वर साइड पर इंतजार है। आप बस एक ही चीज़ के लिए अधिक धागे का उपयोग करें। – I4V
@ I4V: सर्वर पक्ष पर 'async' नाटकीय रूप से * प्रति अनुरोध किए गए धागे की संख्या को कम कर सकता है (यह मानते हुए कि कोड स्वाभाविक रूप से असीमित है और नकली-एसिंक्रोनस नहीं है जैसे' टास्क.रुन')। नतीजतन, एसिंक्रोनस सर्वर 10-100x के क्रम पर अक्सर बेहतर पैमाने पर स्केल करने में सक्षम होते हैं। –
स्टीफन क्लेरी सही है ... मैंने एक माइक्रोसॉफ्ट परिसर में एक प्रशिक्षण पाठ्यक्रम में भाग लिया जहां हमें बताया गया था कि बस आपके सर्वर पर चलने वाले सभी कोड को एसिंक करके, आपको उसी हार्डवेयर के लिए क्षमता में भारी वृद्धि होगी। शुद्ध रूप से, जब कोई विधि किसी उप कॉल से प्रतिक्रिया के लिए प्रतीक्षा कर रही है, तो मुख्य थ्रेड जारी करने और अन्य काम करने के लिए जारी किया जाता है ... यानी अन्य समवर्ती वेब अनुरोधों के साथ सौदा करें। लाभ multitasking है। – GPR