2014-01-14 33 views
4

我提供了基於第三方物流等的方法:應該任務異常處理快速失敗嗎?

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

我想說,如果你不需要在AddItemAsync中做任何額外的事情,如果拋出異常,那麼你可以把它扔在任何地方。如果你這樣做,那麼在AddItemAsync中捕獲它,在catch中做一些事情,然後拋出原始異常或者採取其他的行動。 – valverij

回答

2

如果你不想進行處理,如果參數爲null(這是你的情況看起來像),你做的是正確的。您應該在頂部進行所有參數檢查。爲什麼不必要的處理,如果沒有用的話。

如果您需要清理或添加try/finally塊並在finally塊中執行清理。

3

立即投擲幾乎肯定是正確的做法。我相信有人可以想到一些不起眼的理由 - 但基於你的問題,這聽起來像url是100%的要求。換句話說,如果不是總是需要那麼這可能是一個很好的理由不扔在那裏。

但即使如此,我會盡量找到方法知道我將需要它。

在後臺線程上拋出異常將是一個艱難的行鋤。

2

完全是業務規則特定的。如果您正在循環中添加任務,則循環中的失敗將取消循環,並且甚至不會提交某些任務(可能爲OK)。任務失敗實際上會提交所有任務,並且只會失敗那些有問題的人。

如果全部任務將命中相同的URL,然後驗證前期有意義。

相關問題