Error Handling - ZjzMisaka/PowerThreadPool.zh-CN.Wiki GitHub Wiki

如果任务抛出异常并执行失败, 抛出的异常将被记录下来. 这些信息可以在回调函数或 WorkEndedErrorOccurred 事件中访问.

回调函数

powerPool.QueueWorkItem(() =>
{
    throw new Exception("Message");
}, (res) =>
{
    if (res.Status == Status.Failed)
    {
        Console.WriteLine(res.Exception.Message);
    }
});

WorkEnded 事件

该事件会在任务执行完毕后触发. 事件参数包括任务逻辑执行过程中抛出的异常信息.

powerPool.WorkEnded += (s, e) =>
{
    if (!e.Succeed)
    {
        Console.WriteLine(e.Exception.Message);
    }
};

ErrorOccurred 事件

该事件会在任务逻辑、回调函数或事件(除了 ErrorOccurred 本身)中抛出任何异常后触发. 事件参数包括抛出异常的信息.
正如 "没有回收站的回收站" , 用户必须自行捕获 ErrorOccurred 中抛出的异常, 否则线程池将会崩溃.

powerPool.ErrorOccurred += (s, e) =>
{
    if (e.ErrorFrom == ErrorFrom.Callback)
    {
        Console.WriteLine(e.Exception.Message);
    }
};

ErrorFrom 枚举

enum ErrorFrom
{
    Callback,
    DefaultCallback,
    PoolStarted,
    PoolIdled,
    WorkStarted,
    WorkEnded,
    PoolTimedOut,
    WorkTimedOut,
    WorkStopped,
    WorkCanceled,
    WorkLogic,
}