私の理解には何かがないと思います。私がConsole.WriteLine
が実行されたキャッチにブレークポイントを置くと、停止しません。例外がキャッチされないのはなぜですか?
private static void Main(string[] args)
{
Process(async() => await ClientMethod()).Invoke();
Console.Read();
}
public static async Task ClientMethod()
{
throw new Exception("Test");
}
public static Action Process(Action functor)
{
return() =>
{
try
{
functor();
}
catch (Exception)
{
// Handle exceptions ?
Console.WriteLine("In the catch");
throw;
}
};
}
しかし、私はこれに私のコードを変更した場合、非同期動作を除去することで、ブレークポイントにヒットされています
private static void Main(string[] args)
{
Process(() => ClientMethod()).Invoke();
Console.Read();
}
public static void ClientMethod()
{
throw new Exception("Test");
}
例外が最初のケースでキャッチされていないのはなぜ?どのように私はそれをキャッチできますか?
編集:私はこれに私のコードを変更するが、それはまだ同じです:
private static void Main(string[] args)
{
var res = Process(async() => await ClientMethod()).Invoke();
Console.Read();
}
public static async Task<string> ClientMethod()
{
throw new Exception("Test");
}
public static Func<T> Process<T>(Func<T> functor)
{
return() =>
{
try
{
return functor();
}
catch (Exception)
{
// Handle exceptions ?
Console.WriteLine("In the catch");
throw;
}
};
}
だから私は代わりに、それが動作するはずアクションの戻り値でのFuncを持っていた場合は? – Peekyou
アクションの代わりにFuncを使用して質問を編集しました。したがって、非同期のvoidメソッドではありませんが、例外はまだキャッチされていません。 – Peekyou
いいえ。 – Nkosi