【问题标题】:why c# continuewith pass exception?为什么 c# continuewith 传递异常?
【发布时间】:2018-11-06 12:19:03
【问题描述】:

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

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

【问题讨论】:

  • 你永远不会开始()或等待任务。并打印异常,至少是消息。
  • 这是控制台应用程序(测试程序和主程序)
  • 我从不开始任务,但它在主要项目和测试中都在工作......
  • 你不需要在这里“开始”任务@bommelding
  • @АлександрПодорин 我正在复制这个。使用 .Net fiddle 我得到了预期的行为,其中只有 OnlyOnFaulted 的延续被称为 dotnetfiddle.net/YrvCZJ

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2011-03-08
    相关资源
    最近更新 更多