C# 未捕获任务异常

C# 未捕获任务异常,c#,exception,try-catch,task-parallel-library,C#,Exception,Try Catch,Task Parallel Library,使用以下代码,我只捕获ContinueWith操作中的异常,而不捕获try-catch块中的异常。有人知道为什么我不能用try-catch接球吗?据我所知,ContinueWith是处理任务异常的旧方法,而对于.Net Core 3,使用try-catch也可以捕获异常 try { await Socket.ConnectAsync(endpoint) .ContinueWith(task => { // Works

使用以下代码,我只捕获ContinueWith操作中的异常,而不捕获try-catch块中的异常。有人知道为什么我不能用try-catch接球吗?据我所知,ContinueWith是处理任务异常的旧方法,而对于.Net Core 3,使用try-catch也可以捕获异常

try
{
    await Socket.ConnectAsync(endpoint)
        .ContinueWith(task =>
        {
            // Works
            throw task.Exception;
        }, TaskContinuationOptions.OnlyOnFaulted);
}
catch (AggregateException ae)
{
    // Doesn't work
    throw;
}
catch (OperationCanceledException ae)
{
    // Doesn't work
    throw;
}
catch (Exception e)
{
    // Doesn't work
    throw;
}
Socket.ConnectAsync来自类

编辑1: 我将问题缩小到Microsoft的套接字扩展方法:

public static Task ConnectAsync(this Socket socket, EndPoint remoteEP)
    {
        return Task.Factory.FromAsync(
            (targetEndPoint, callback, state) => ((Socket)state).BeginConnect(targetEndPoint, callback, state),
            asyncResult => ((Socket)asyncResult.AsyncState).EndConnect(asyncResult),
            remoteEP,
            state: socket);
    }

此实现导致无法捕获异常。我不知道如何使Task.Factory抛出异常。

好的,所以看起来唯一的问题是调试器设置。我重置了设置并禁用了“仅我的代码”,现在它可以工作了

您对这两种操作有何期望?如果捕获到异常,除非您重新执行,否则它不会触发封闭try/catch的catch块。如果我在没有ContinueWith的情况下尝试catch,这并不重要。只有试捕也不捕啊。我不清楚,抱歉不清楚。我在ContinueWith
ContinueWith中添加了抛出,这是任务异常处理的旧方法,而在.Net Core 3中,使用try-catch也可以捕获异常
——从技术上讲是正确的,但旧方法是.Net 4.0时代(2010年),随着.Net 4.5(2012年)中引入
wait
,可能会被视为过时。NET Core 3.0(2019)并未改变这一点;它仍然使用与过去七年相同的
wait