0
我有一些阻塞的任務,拋出異常,例如:如何在C#中異步調用動作中捕獲異常?
public static string DummyFunction(string msg = "Dummy Funciton", int seconds = 2, string retval = null, Exception exception = null)
{
if (exception != null)
{
throw exception;
}
Console.WriteLine("Start: " + msg);
System.Threading.Thread.Sleep(seconds * 1000);
Console.WriteLine("End: " + msg);
return retval;
}
我異步調用此方法,但我怎麼能捕獲異常?
try
{
Action act6 =() => DummyFunction("act6 throws exception", exception: new Exception("thrown by act6"));
var ar6 = act6.BeginInvoke(null, null);
ar6.AsyncWaitHandle.WaitOne();
}
catch (Exception e)
{
// Cannot reach here.
Console.WriteLine("Exception caught: {0}", e);
}
我相信如果你調用它,異常將從'EndInvoke'拋出。 – slawekwin
值得指出的是,異步調用委託並在調用線程中等待異步執行完成是沒有意義的。人們希望你的真實代碼不像你在這裏發佈的代碼。 –
@slawekwin,我無法通過圍繞'EndInvoke'嘗試''來捕獲異常。 –