एसिंक विधि को लागू करने/समर्थित या अमान्य ऑपरेशन के रूप में चिह्नित करने का सही तरीका क्या नहीं है। सादगी के लिए मैं उदाहरणों में केवल NotImplementedException
का उपयोग करूंगा, लेकिन प्रश्न NotSupportedException
और InvalidOperationException
पर भी लागू होता है।कार्यान्वित/समर्थित/अमान्य ऑपरेशन async विधि
एक सिंक तरह से एक होगा अपवाद सरल फेंक:
public override void X() {
throw new NotImplementedException();
}
क्या async दुनिया में इस कोड के बराबर हो सकता है?
/* 1 */ public override Task XAsync() {
throw new NotImplementedException();
}
या
/* 2 */ public override Task XAsync() {
return Task.FromException(new NotImplementedException());
}
इन तरीकों की जटिलताओं क्या हैं? क्या कोई बेहतर तरीका है?
से बचने के लिए "नहीं, आप एक विधि की जरूरत नहीं है यहाँ async होने के लिए"/"यह async नहीं कर रहा है" मैं कहूँगा कि विधि कुछ इंटरफ़ेस या अमूर्त वर्ग लागू करता है।
कुछ तरीकों जो मैं नहीं पर विचार कर रहा हूँ:
/* 3 */ public async override Task XAsync() { // here is an CS1998 warning
throw new NotImplementedException();
}
संकलक would just generate the useless state machine, जो शब्दार्थ 2
/* 4 */ public async override Task XAsync() {
await Task.Yield();
throw new NotImplementedException();
}
यह the same 3 के रूप में है के बराबर है, लेकिन इंतजार के साथ जोड़ा कार्य पर। युवा();
अच्छा सवाल। पहला विकल्प अपवाद फेंकता है जब विधि लागू की जाती है, दूसरा परिणाम जब प्रतीक्षा की जाती है। मेरे पास पहले विकल्प के लिए एक छोटी वरीयता है, क्योंकि यह "जल्दी विफल रहता है", लेकिन मुझे आश्चर्य है कि विशेषज्ञों को क्या कहना होगा। – Heinzi
शायद यह मदद करता है: http: // stackoverflow।कॉम/ए/13254787/31679 9 –
हाँ, @ फ़ेलिपऑरियन ने देखा कि, धन्यवाद – hazzik