C# 如何创建传递任务.ContinueWith?

C# 如何创建传递任务.ContinueWith?,c#,task-parallel-library,C#,Task Parallel Library,我希望在原始任务结束时附加一个任务,但希望保留原始结果和类型。附加的任务仅用于记录目的,例如写入控制台等。例如: Task.Run(() => DateTime.Now.Hour > 12 ? "Hey!" : throw new Exception()) .ContinueWith(t => { if (t.IsCompletedSuccessfully) { Console.WriteLine("Suc

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

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。在这里,如果任务没有遇到错误,我将返回t.Result,如果任务遇到错误,我将抛出t.Exception。看起来类型仍然是任务,但不确定异常端


这样做对吗?或者有更好的方法吗?

没有理由重新引发异常。该任务将抛出AggregateException,您可以使用InnerExceptions属性获取真正的异常来处理它们

对于日志记录,您可以使用以下方法区分成功和失败:

只有在任务成功执行到结束时,才会记录成功。如果存在未处理的异常,则将记录失败


这将日志记录和获取结果分离开来。因此,您只需从第一个任务中获得结果。

没有理由重新显示异常。该任务将抛出AggregateException,您可以使用InnerExceptions属性获取真正的异常来处理它们

对于日志记录,您可以使用以下方法区分成功和失败:

只有在任务成功执行到结束时,才会记录成功。如果存在未处理的异常,则将记录失败

这将日志记录和获取结果分离开来。所以你可以从第一个任务中得到结果

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);