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