[英]Exception not caught in Async / Await block
我只是學習在Windows窗體應用程序中使用async / await,嘗試在執行慢動作時保持我的Windows應用程序響應。 我看到拋出異常的處理有所不同。
如果我使用WebClient.DownloadStringTaskAsync,我的代碼會捕獲異常:
private async void button1_Click(object sender, EventArgs e)
{
try
{
this.textBox1.Text = await webClient.DownloadStringTaskAsync("invalid address");
}
catch (Exception exc)
{
textBox1.Text = exc.Message;
}
}
但是,如果我在自己的代碼中調用異步函數,則不會捕獲異常:
private string GetText()
{
throw new Exception("Tough luck!");
}
private async void button3_Click(object sender, EventArgs e)
{
using (var webClient = new WebClient())
{
try
{
this.textBox1.Text = await Task.Run(() => GetText());
}
catch (Exception exc)
{
textBox1.Text = exc.Message;
}
}
}
作為stackoverflow問題的答案使用async / await有人建議在工具 - >選項 - >調試 - >常規中“禁用'我的代碼'
在Daniel Hilgarth的評論之后(感謝Daniel!),我看到了一個復制粘貼錯誤。 我在這里糾正了它。 問題仍然存在,但如果您按照建議禁用“只是我的代碼”,則會正確捕獲異常。
所以我想這個問題已經解決了。
問題是這樣的:
您正在拋出Exception
但捕獲WebException
。
兩種解決方案
WebException
Exception
解決方案1是首選,因為您實際上不應該拋出非特定的Exception
。
您正在拋出一個Exception
類型,但只捕獲更具體的WebException
。 捕獲WebException
只會捕獲WebException
類型的WebException
或從中派生的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.