2016-08-17 5 views
13

मैंने कुछ स्थानों में पढ़ा है कि .GetAwaiter().GetResult(); डेडलॉक्स का कारण बन सकता है और हमें इसके बजाय async/await का उपयोग करना चाहिए। लेकिन मुझे कई कोड नमूने दिखाई देते हैं जहां इसका उपयोग किया जाता है। क्या इसका इस्तेमाल करना ठीक है? कौन से मामले हैं जहां यह डेडलॉक कर सकता है? क्या मुझे कुछ और उपयोग करना चाहिए, जैसे Task.Wait?है .GetAwaiter()। GetResult(); सामान्य उपयोग के लिए सुरक्षित?

+0

बहुत व्यापक, दोहराया विषय। SO –

उत्तर

23

जैसा कि मैंने अपने ब्लॉग, GetAwaiter().GetResult() can deadlock when it's used in a one-thread-at-a-time context पर वर्णन किया है। यूआई थ्रेड या एएसपी.NET संदर्भ में (प्री-कोर एएसपी.नेट के लिए) पर कॉल किया जाने पर यह आमतौर पर देखा जाता है।

Wait समान समस्याएं हैं। उपयुक्त फिक्स await का उपयोग करना है, और कॉलिंग कोड को एसिंक्रोनस बनाना है।

ध्यान दें कि कंसोल ऐप्स में Main विधि इस नियम का अपवाद है; यह वहां उपयोग करने के लिए बिल्कुल उपयुक्त है। कई कोड नमूने इस तरह से इसका इस्तेमाल करते हैं।

+0

खोजकर शुरू करें मुझे लगता है कि यह वेबएपी सेवाओं के लिए भी सही है, सही? – Cyan

+0

@Cyan: हाँ, किसी भी प्रकार का ASP.NET अनुरोध संदर्भ। प्री-कोर, वह है; अनुरोध संदर्भ ASP.NET कोर में हटा दिया गया था। –

+0

धन्यवाद स्टीफन! – Cyan

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