使用任务时,您必须特别注意处理异常,这是一个示例:
class Program
{
static void Main(string[] args)
{
Task<int> task = new Task<int>(Test);
task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted);
task.Start();
Console.ReadLine();
}
static int Test()
{
throw new Exception();
}
static void ExceptionHandler(Task<int> task)
{
var exception = task.Exception;
Console.WriteLine(exception);
}
}
来自 here
我的问题是,是否有任何方法可以制作自定义任务来处理(记录到服务)所有异常,而无需开发人员手动声明?某种帮助传承。
最佳答案
您可以创建 MyLoggingTask
作为 Task 的子类,实现与您相关的构造函数,或者为了安全起见实现所有构造函数(我在 .NET Framework 4.5 中看到了其中的 8 个),并重写 Start() 方法。
然后将每个任务使用替换为 MyLoggingTask
+ 对子类命名空间的引用,或使用 using Task = Your.NameSpace.MyLoggingTask
最小化“手动”方面,创建一个实际上是您自己的类的任务别名。
作为替代方案,您可以创建一个扩展方法 public static StartWithLogging<T>(this Task<T> task)
它负责 ContinueWith
.然后用 StartWithLogging()
替换每个 Start() 调用+ 引用扩展类的命名空间。
恐怕没有更简单的选择,并且始终需要一定程度的“手动声明”。
关于c# - 内置异常处理的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36844117/