我遵循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
我會在這裏拋出另一個問題的評論:我的理解是,如果主線程終止,它的所有子線程同時終止。這是真的? –