繁体   English   中英

异常未在Async / Await块中捕获

[英]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

两种解决方案

  1. 抛出WebException
  2. 抓住Exception

解决方案1是首选,因为您实际上不应该抛出非特定的Exception

您正在抛出一个Exception类型,但只捕获更具体的WebException 捕获WebException只会捕获WebException类型的WebException或从中派生的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM