任务异常处理应快速失败



我提供了一个基于TPL的方法,如下所示:

    private Task AddItemAsync(Uri url, CancellationToken token)
    {
        if (url == null)
            throw new ArgumentNullException("url");
        var result = Task.Factory.StartNew(() => 
        {
            // Do some stuff here
        }, token);
        return result;
    }

现在我想知道是否可以立即抛出异常或将其抛出到任务中。开始新的{}东西。

立即扔掉它几乎肯定是正确的方法。我相信有人可以想到一些晦涩的理由不这样做 - 但根据您的问题,听起来url是 100% 必需的。换句话说,如果它并不总是需要的,那么这可能是不把它扔在那里的一个很好的理由。

但即便如此,我也会尝试找到一种方法来知道我将需要它。

在后台线程上抛出该异常将很难锄头。

如果您不想在参数为 null 时进行处理(在您的情况下看起来像这样),那么您正在正确执行。您应该将所有参数检查放在顶部。如果它没有用,为什么要进行不必要的处理。

如果您需要清理或其他内容,请添加尝试/最终阻止并在最后阻止中进行清理。

完全特定于业务规则。如果要在循环中添加任务,则循环失败将取消循环,并且甚至不会提交某些任务(可能正常)。任务失败实际上将提交所有任务,并且仅失败那些有问题的任务。

如果所有任务都命中相同的URL,那么预先验证是有意义的。

相关内容

  • 没有找到相关文章