首页 > 解决方案 > 为什么 c# continuewith 传递异常?

问题描述

我试图在没有等待的情况下处理任务异常。我正在尝试将 ContinueWith 与 TaskContinuationOptions.NotOnRanToCompletion 一起使用。但我有一个主要问题 - 在测试程序中一切顺利,并且只能使用来自 ContinueWith 的代码。但是在我的主程序中,Exception 仍然会去 catch 块和 ContinueWith (函数不会停止工作,但我想以其他方式处理这个异常)。

小例子看起来像这样

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Testim();
        }
        catch (Exception)
        {
            Console.WriteLine("catch");
        }

    }

    static void method()
    {
        HttpClient cl=new HttpClient();
        cl.PostAsync("http://oru.uri", null);
    }

    static void Testim()
    {
        HttpClient cl = new HttpClient();
        Task t = cl.PostAsync("http://oru.uri", null);
        t.ContinueWith((Task t1) => { Console.WriteLine("success"); }, CancellationToken.None,
            TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.Current);
        t.ContinueWith((Task t1) => { Console.WriteLine("error"); }, CancellationToken.None,
            TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.Current);
        Console.ReadKey();
    }
}

在测试项目中一切正常,但在我的其他项目中,例外处理 2 次 - 在 catch 和 continuewith 中,并且 catch 首先执行。

标签: c#exceptionasync-awaittry-catchrethrow

解决方案


我的代码(不是这个例子)的问题是我 Wait() 任务。但是当我在 Wait() 之前收到异常时,Wait 会生成异常


推荐阅读