任务并行库异常处理”;一项任务被取消&”;

本文关键字:任务 一项 取消 并行 异常处理 | 更新日期: 2024-10-24 15:16:36

我有一个方法:

var taskCount = Task<List<Client>>.Factory.StartNew(() =>
                            {
return ClientRepository.GetListAll();
                            }).LogExceptions<Client>();
count = taskCount.Result;

我有LogException的扩展方法为:

public static Task<T> LogExceptions<T>(this Task<T> task) where T : new()
        {
            return task.ContinueWith<T>((antecedent) =>
            {
                bool isError = false;
                var aggException = antecedent.Exception.Flatten();
                foreach (var exception in aggException.InnerExceptions)
                {
                    isError = true;
                    LogWrite.LogStep(" Task Exception - ", exception.Message);
                }
                if (isError)
                {
                    return new T();
                }
                else
                {
                    return antecedent.Result;
                }
            },
            TaskContinuationOptions.OnlyOnFaulted);
        }

如果发生任何异常,上面的代码都可以正常工作,它会处理异常并防止工作进程关闭它。

但当没有错误时,它只是返回一个聚合异常,即"一个任务被取消"。不确定我在上面的代码中做错了什么。

如果上面的代码是错误的,那么以通用的方式处理任务中的异常的最佳方法是什么。

任务并行库异常处理”;一项任务被取消&”;

问题是您在continuation中选择了TaskContinuationOptionsOnlyOnFaulted。根据MSDN,OnlyOnFaulted表示只有在前面的任务引发未处理的异常时才会继续。由于并非在所有情况下都会出现异常,因此延续操作无法正常工作。尝试省略TaskContinuationOptions参数或使用默认枚举值None