c# - 在匿名方法中执行任务时捕获抛出的异常

标签 c# .net task-parallel-library system.reactive

我有一个类似这样的代码:

class A
{
    public Action<int, int> OnAddition;

    public int Add(int val1, int val2)
    {
        if (OnAddition != null)
        {
            OnAddition(val1, val2);
        }

        return val1 + val2;
    }
}

class B
{
    A a = new A();

    public B()
    {
        a.OnAddition = (v1, v2) =>
        {
            Task.Run(() =>
            {
                Console.WriteLine("Adding {0} and {1}", v1, v2);
                throw new Exception("Blah");
            });
        };
    }

    public int Add(int val1, int val2)
    {
        return a.Add(val1, val2);
    }
}

class Program
{
    static void Main(string[] args)
    {
        try
        {
            B b = new B();

            Console.WriteLine(b.Add(1, 7));
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

我无法控制 AB 类,问题是当 throw new Exception("Blah"); 碰巧我的代码无法捕获异常。

我的代码如何捕获该异常?

最佳答案

你不能。如果您不能更改这些类的代码,您就无法捕获该异常。

但是,您可以通过订阅 GC 收集该任务时将引发的 TaskScheduler.UnobservedTaskException 事件得到通知。

关于c# - 在匿名方法中执行任务时捕获抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278365/

相关文章:

c# - 为什么在语法上无效的C#代码会编译?

.net - 对 Microsoft WebSockets 命名空间感到困惑

c# - C# 中的 IPC 机制 - 使用和最佳实践

C# LINQ To Sql 默认对象实例化过度优化?

c# - 如何使用异步/等待设置 TaskContinuationOptions?

c# - 任务并行库 - 单核并行

c# - 如何找出导致 NullReferenceException 的原因

c# - 无法将重复行添加到 asp.net 表控件

c# - 进程和AppDomain加载/卸载

c# - 库中的 Task.Yield() 需要 ConfigureWait(false)