为什么C#continuewith通过异常?

时间:2018-11-06 12:19:03

标签: c# exception async-await try-catch rethrow

我正尝试在不等待的情况下处理任务异常。 我正在尝试将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();
    }
}

在测试项目中一切正常,但在我的其他项目中,exept可以处理2次-在catch中并继续执行,然后catch首先执行。

1 个答案:

答案 0 :(得分:0)

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