代码之家  ›  专栏  ›  技术社区  ›  Endy Tjahjono

如何创建传递任务。继续吗?

  •  1
  • Endy Tjahjono  · 技术社区  · 8 年前

    我想在原始任务的末尾附加一个任务,但希望保留原始结果和类型。附加的任务仅用于日志记录,例如写入控制台等。例如:

    Task.Run(() => DateTime.Now.Hour > 12 ? "Hey!" : throw new Exception())
        .ContinueWith(t =>
        {
            if (t.IsCompletedSuccessfully)
            {
                Console.WriteLine("Success");
                return t.Result;
            }
            else
            {
                Console.WriteLine("Failure");
                throw t.Exception;
            }
        });
    

    原始任务的类型为 Task<string> . 我在这儿 return t.Result 如果任务没有遇到错误,我 throw t.Exception 任务<字符串>

    这样做对吗?还是有更好的办法?

    1 回复  |  直到 8 年前
        1
  •  5
  •   Selman Genç    8 年前

    没有理由重复异常。任务将抛出 AggregrateException 你可以得到真正的例外 InnerExceptions 属性来处理它们。

    对于日志记录,可以使用 TaskContinuationOptions :

    var t = Task.Run(() => DateTime.Now.Hour > 12 ? "Hey!" : throw new Exception());
    
    t.ContinueWith(_ => Console.WriteLine("Success"), TaskContinuationOptions.OnlyOnRanToCompletion);
    
    t.ContinueWith(_ => Console.WriteLine("Faiure"), TaskContinuationOptions.OnlyOnFaulted);