【问题标题】:Why try catch in programming method is not working?为什么在编程方法中尝试 catch 不起作用?
【发布时间】:2012-07-27 06:01:25
【问题描述】:

我对这个问题感到头疼。我无法实现我的尝试可以捕获我的异常。这是图片。

一会儿,我正在试验这个。它有效..

            var task = client.GetAsync(uri);
            try
            {
                task.Wait();
            }
            catch (Exception ex)
            {
                throw ex;
            }

但上面的问题是 UI 冻结。我不希望那样。我能做什么?

【问题讨论】:

  • 无关注意:不要使用throw ex;。使用throw;。它将重新抛出异常而不重置堆栈。
  • 好的,谢谢你的意见!
  • 也许你启用了异常中断:转到 Debug/Exceptions... 并取消选择“Common Runtime Language Exception”的“Thrown”列...

标签: c# asynchronous windows-8 task-parallel-library async-await


【解决方案1】:

永远不要打电话给task.Wait()

task.Wait() 将同步等待任务完成。
这将冻结 UI。

您的 catch 块正在工作,但您在异常被捕获之前就看到了它。
取消勾选后重试,catch块应该会被触发。

【讨论】:

  • 这是真正的 SLaks,非常感谢!!我在这个问题上花了超过 4 个小时,这很容易。它有效!
  • 解释是合理的,但我认为 never 可能有点太强了。
  • 我认为"never" is fineWait 不仅同步阻塞,而且它也是死锁的常见原因并且将任何错误包装在AggregateException 中。 Wait 只是 TPL 的保留(如果您正在进行同步并行编程,Wait 可以);它不应该与async 代码一起使用。
  • @MgSam 与任何关于编程的绝对原则一样,总会有例外。但是正如其他人所提到的,在一个程序中同时使用Wait()await 是一个非常糟糕的主意,除非你确定你知道你在做什么。我只能想到一种可能没问题的情况:等待来自控制台应用程序的Main()async 方法(不能是async)。
  • 那么@DarfZon 应该怎么做??我理解你在喊“永不言败”的口号,但解决问题呢?所以 Task.WaitAll() 将同步等待所有线程/任务和? @DarfZon 应该做什么?不是 wait 的任务?那么如何应对异常呢?
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
  • 2021-10-26
相关资源
最近更新 更多