मैंने पढ़ा है कि 'पृष्ठभूमिवर्कर' designed to be replaced Ansyc/Await द्वारा है।क्या प्रतीक्षा की गई शेष विधि अतुल्यकालिक है?
क्योंकि मुझे Async/Await के संघनित रूप को पसंद है, इसलिए मैं अपने कुछ पृष्ठभूमिवर्क्सर्स को Async/Await कॉल में परिवर्तित करना शुरू कर रहा हूं।
इस कोड को मेरे पास है (यूआई से कहा जाता है) का एक उदाहरण है:
public async void RunFromTheUI()
{
await OtherAction();
}
public async void OtherAction()
{
var results = await services.SomeRemoteAction();
foreach (var result in results)
{
result.SemiIntenseCalculation();
Several();
Other();
NonAsync();
Calls();
}
SomeFileIO();
}
जब मैं RunFromTheUI
यह लगभग तुरंत वापस आ जाएगी फोन (Async के अनुसार और प्रतीक्षा डिजाइन)।
लेकिन जब यह services.SomeRemoteAction()
खत्म होने के बाद फिर से शुरू होता है तो इसे foreach
लूप और अन्य विधि कॉल चलाने के लिए कॉल किया जाता है।
मेरा प्रश्न है: यदि वह लूप एक प्रदर्शन हॉग है तो यह यूआई को फ्रीज करेगा? (इससे पहले कि मैं इसे पृष्ठभूमि कार्यकर्ता थ्रेड में था, इसलिए यह यूआई को धीमा नहीं करता था)।
नोट: मैं .NET 4.0 को लक्षित कर रहा हूं और Async Nuget पैकेज का उपयोग कर रहा हूं।
async/प्रतीक्षा और पृष्ठभूमिवर्कर दो अलग-अलग समस्याओं को हल करता है। बीजी कार्यकर्ता को कार्य द्वारा अधिक सटीक रूप से प्रतिस्थापित किया जाता है। Async केवल तभी प्रतिस्थापित करता है जब कार्यकर्ता निकाय कोड मूल रूप से निष्क्रिय हो जाता है, जहां बीजीडब्लू/कार्य अभी भी उपयोगी होते हैं जब आपको भारी उठाने की आवश्यकता होती है। मुझे लगता है कि आप अपने प्रश्न में सेवा परिणामों पर इंतजार कर रहे हैं, बस एफवाईआई। –
1. आपका कोड संकलित नहीं होगा, आप 'async शून्य' विधि का 'इंतजार नहीं कर सकते'। 2. आपको 'async void' विधियों का उपयोग करने से बचना चाहिए, उन्हें' प्रतीक्षा 'नहीं किया जा सकता है और अपवाद को और अधिक कठिन बना दिया जा सकता है। – svick