मुझे पता है कि आम तौर पर async void
कार्यों को शुरू करने के लिए आग और भूल जाने वाली विधियों का उपयोग करना एक बुरा विचार माना जाता है, क्योंकि लंबित कार्य का कोई ट्रैक नहीं है और यह अपवादों को संभालने के लिए मुश्किल है जो इस तरह की विधि के अंदर फेंक दिया जा सकता है।
क्या मुझे आम तौर पर async void
इवेंट हैंडलर से बचना चाहिए ? उदाहरण के लिए,
private async void Form_Load(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
मैं इसे इस तरह से फिर से लिख सकता हूं:
Task onFormLoadTask = null; // track the task, can implement cancellation
private void Form_Load(object sender, System.EventArgs e)
{
this.onFormLoadTask = OnFormLoadTaskAsync(sender, e);
}
private async Task OnFormLoadTaskAsync(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
एसिंक्स इवेंट हैंडलर के लिए पानी के नीचे की चट्टानें, संभावित फिर से प्रवेश के अलावा क्या हैं?