Task任务异常处理能否快速失败?

时间:2014-01-14 16:02:26

标签: c#

我提供了一个基于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;
    }

现在我想知道是否可以立即抛出异常或将其抛入task.StartNew {}内容。

3 个答案:

答案 0 :(得分:3)

立即投掷它几乎肯定是正确的方法。我确信有人可以想到一些不起作用的理由 - 但根据你的问题,听起来url是100%必需的。换句话说,如果它不是总是那么那么这可能是一个不把它扔到那里的好理由。

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

在后台线程上抛出该异常将是一个很难锄头的行。

答案 1 :(得分:2)

如果您不想在参数为空(在您的情况下看起来像是这样)的情况下进行处理,那么您正在正确地执行此操作。您应该在顶部进行所有参数检查。如果没有用处,为什么要进行不必要的处理呢。

如果你需要清理或添加一个try / finally块并在finally块中进行清理。

答案 2 :(得分:2)

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

如果所有任务都会访问相同的网址,那么事先验证是有道理的。