我遵循Microsoft指定的模式。 https://msdn.microsoft.com/en-us/library/hh191443.aspx如何处理多个异常与异步等待
本文介绍使用await开发异步代码。但是,他们不会谈论在等待退货之前发生异常时会发生什么情况。
在下面的例子中,外部异常结束父线程,任务没有线程返回。我如何处理这个scneario?
class Program
{
private static void Main(string[] args)
{
CallAsync();
Console.ReadKey();
}
public static async void CallAsync()
{
var task = CallExceptionAsync();
ThrowException("Outside");
await task;
}
public static Task CallExceptionAsync()
{
return Task.Run(() =>
{
ThrowException("Inside");
});
}
public static void ThrowException(string msg)
{
throw new Exception(msg);
}
}
我误解了你的例子。我说的对于你开始的第二个线程来说是正确的,但是你也在主线程级别抛出一个异常。你想说啥?如果你没有该主线程异常的catch块,它将被终止(或被更高一些的其他代码捕获)。你问第二个线程会发生什么,如果第一个线程在它之前终止? –
我的例子是一个愚蠢的例子。我的实际代码更复杂,我能够在这里复制相同的行为。 在我的原始代码中,我正在调用Web服务,并保存到数据库。两者都抛出异常。我可以在这里以一个更简单的例子复制它。 不管它是否在主要或没有.wait()。行为仍然是这样的 – Anish
我会在这里抛出另一个问题的评论:我的理解是,如果主线程终止,它的所有子线程同时终止。这是真的? –