c# - 内置异常处理的任务?

标签 c# .net multithreading exception task

使用任务时,您必须特别注意处理异常,这是一个示例:

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/

相关文章:

c# - 无法手动或自动将 ILNumerics 控件添加到 VS2012 工具箱

c# - 添加重复数字时,哪个数字字典集合会重新排序项目?

c# - DotNetOpenAuth 或任何其他用于 .net 2.0 项目的 .Net Open ID 库

Java ScheduledThreadPoolExecutor 运行延迟 15 毫秒/时间不一致?

c# - 如何仅使用跟踪的更改来压缩文件?

c# - 如何在 WPF 中将一个 ResourceDictionary 导入到另一个 ResourceDictionary 中?

c# - VB param ( , ) 中的奇怪参数转换为 C#

c# - 如何从 C#.NET 代码生成 JS

multithreading - 如何从与其关联的线程中发出 CompletableFutures 已完成或已取消的信号?

用于解决性能问题的 Java 分析器