这个例子 “失败”:的try-catch异步异常
static async void Main(string[] args)
{
try
{
await TaskEx.Run(() => { throw new Exception("failure"); });
}
catch (Exception)
{
throw new Exception("success");
}
}
也就是说,与文本 “失败” 异常堆满了。
然后我尝试以下解决方法:
static async void Main(string[] args)
{
try
{
await SafeRun(() => { throw new Exception("failure"); });
}
catch (Exception)
{
throw new Exception("success");
}
}
static async Task SafeRun(Action action)
{
var ex = default(Exception);
await TaskEx.Run(() =>
{
try
{
action();
}
catch (Exception _)
{
ex = _;
}
});
if (ex != default(Exception))
throw ex;
}
这并没有帮助。
我想我的异步CTP刷新安装可能会被解决。
这段代码应该如我所期望的那样工作(“成功”起来,而不是“失败”),或者这不是“假设”以这种方式工作。如果不是,你将如何解决它?
它来自一个控制台应用程序,用于测试异步,所以顶级方法是我的情况下的主要方法。 – 2011-06-16 21:58:38
@Bent我已经更新了答案,以反映你如何调用,这可能是也可能不是错误,但是由'async'入口点引起的未定义行为 – 2011-06-18 16:25:22