मैं मूल रूप से सोच रहा हूं कि सी # में, मुझे await
कीवर्ड के माध्यम से प्रतीक्षा किए जाने वाले एसिंक्रोनस विधियों से अपवाद प्राप्त करना चाहिए। उदाहरण के लिए निम्नलिखित छोटे कंसोल प्रोग्राम पर विचार करें, जिसमें सबसे महत्वपूर्ण रूप से AwaitSync
नामक विधि शामिल है। AwaitSync
TestAsync
पर कॉल करता है, जो एक कार्य देता है जब निष्पादित किया गया अपवाद फेंकता है। मैं AwaitAsync
, में अपवाद को पकड़ने का प्रयास करता हूं लेकिन यह अनचाहे हो जाता है।मैं सी # में एक एसिंक्रोनस विधि से अपवाद कैसे प्राप्त करूं?
class Program
{
static void Main(string[] args)
{
AwaitAsync();
Console.ReadKey();
}
static async Task AwaitAsync()
{
try
{
await TestAsync();
}
catch (Exception)
{
Console.WriteLine("Exception caught");
}
}
static Task TestAsync()
{
return Task.Factory.StartNew(() => { throw new Exception("Test"); });
}
}
मैं कैसे टास्क TestAsync
द्वारा लौटाए से अपवाद को पकड़ने के बारे में जाने के लिए चाहिए? हालांकि यह उदाहरण एक कंसोल प्रोग्राम है, मेरी वास्तविक जीवन समस्या एएसपी.नेट एमवीसी/वेब एपीआई के संदर्भ में है।
संपादित करें: बाहर कर देता है अपवाद पकड़ा हो रही है, तकनीकी कारणों से मैं सिर्फ 'अपवाद पकड़ा' संदेश नोटिस नहीं किया था इससे पहले कि टर्मिनल बंद कर दिया। किसी भी मामले में, जॉन स्कीट का जवाब await
और अपवाद हैंडलिंग की मेरी समझ के लिए बहुत मूल्यवान था।
क्या आप कह रहे हैं कि यह काम नहीं करता है? – jishi
जब मैं आपका कोड चलाता हूं, तो मुझे "अपवाद पकड़ा गया" दिखाई देता है। – spender
यह मेरे लिए पकड़ा नहीं जाता है। मैं फिर से जांच करूंगा। – aknuds1