मैं डैप्पर का उपयोग कर और यह एक गतिशील IEnumerable लौटने के लिए, इस तरह हो रही थी:गतिशील IENumerable प्रतीक्षा करने योग्य पर पहला() या ElementAt() क्यों है?
var rows = conn.Query("SELECT * FROM T WHERE ID = @id", new { id = tableId });
var row = rows.FirstOrDefault();
यहाँ, rows
प्रकार IEnumerable<dynamic>
की है। IntelliSense का कहना है FirstOrDefault()
प्रतीक्षा योग्य है, और इसका उपयोग await FirstOrDefault()
है। सभी LINQ प्रश्नों को प्रतीक्षा करने योग्य नहीं दिखाया जाता है, लेकिन ऐसा लगता है कि विशेष रूप से वे जो किसी भी तरह से एकल तत्व हैं।
जैसे ही मैं मजबूत टाइपिंग का उपयोग करता हूं, यह व्यवहार दूर हो जाता है।
ऐसा इसलिए है क्योंकि .NET को पता नहीं चल सकता कि आप रनटाइम पर जो प्रकार प्राप्त कर रहे हैं वह प्रतीक्षा योग्य है या नहीं, ताकि अगर आपको इसकी आवश्यकता हो तो यह "अनुमति देता है"? लेकिन इसे लागू नहीं करता है? या मुझे लगता है कि, कुछ गतिशील भाषा रनटाइम व्यवहार के कारण, वास्तव में await
का उपयोग करें?
मैंने खोज रखा है लेकिन इस ऑनलाइन के बारे में सबसे छोटी चीज़ नहीं मिली है।
आप गतिशील वापसी से प्रतीक्षा कर सकते हैं। मुझे लगता है कि अगर कोई कार्य नहीं है तो यह अपवाद फेंक देगा। संपादित करें: मैंने इसका परीक्षण किया है। यदि गतिशील कार्य या कार्य नहीं है तो यह अपवाद फेंक देगा। –
आप 'गतिशील' पर 'GetAwaiter() 'को कॉल कर सकते हैं, इसलिए हाँ यह प्रतीक्षा योग्य है। – PetSerAl