我提供了一个基于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,那么预先验证是有意义的。