我提供了一个基于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 {}内容。
答案 0 :(得分:3)
立即投掷它几乎肯定是正确的方法。我确信有人可以想到一些不起作用的理由 - 但根据你的问题,听起来url
是100%必需的。换句话说,如果它不是总是那么那么这可能是一个不把它扔到那里的好理由。
但即便如此,我也会尝试找到知道的方法,我将需要它。
在后台线程上抛出该异常将是一个很难锄头的行。
答案 1 :(得分:2)
如果您不想在参数为空(在您的情况下看起来像是这样)的情况下进行处理,那么您正在正确地执行此操作。您应该在顶部进行所有参数检查。如果没有用处,为什么要进行不必要的处理呢。
如果你需要清理或添加一个try / finally块并在finally块中进行清理。
答案 2 :(得分:2)
完全符合业务规则。如果要在循环中添加任务,则循环失败将取消循环,甚至不会提交某些任务(可能正常)。任务失败实际上将提交所有任务,并且只会使那些有问题的人失败。
如果所有任务都会访问相同的网址,那么事先验证是有道理的。