2010-07-06 57 views
0

我有一個方法,需要嘗試更新我的Twitter狀態。我會發送很多消息,並且如果某條消息拋出錯誤,我想繼續。忽略webservice錯誤。 TryXXX模式

今天我抓住了一切,但我不喜歡。也許我應該把這個問題留給調用者?或者返回異常,而不是布爾?

public bool RefreshStatus(string status, out Status newStatus) 
    { 
     try 
     { 
      newStatus = twitterContext.UpdateStatus(status); 
      return true; 
     } 
     catch 
     { 
      newStatus = null; 
      return false; 
     } 
    } 

我在裏面調用了這個方法。 我看到像Int32.TryParse方法,他們不這樣做,只是忽略驗證(我不具備在這種情況下)

回答

0

其實什麼的TryParse做(在的Int32,單等)沒有拋出異常,但不會捕獲在所謂的方法中拋出的異常。

我真正需要的是一個twitterContext.TryUpdateStatus(狀態);

0

您可以實現這個方法的兩個版本:

public bool TryRefreshStatus(string status, out Status new Status) 

public Status RefreshStatus(string status) 

第一個可以在try/catch塊內調用第二個,如果拋出異常則返回false。您應該只捕獲您期望從狀態更新中拋出的異常,而不是所有異常(例如,不是System.Exception)。

爲了解決推動大量更新的問題,我建議創建一個隊列(先入先出),將您的更新添加到。然後,有一個工作線程嘗試將這些更新發布到Twitter。更新成功後,您可以將其從隊列中刪除。否則,你可以繼續嘗試。

您可能想要對重試次數或狀態更新的最長時間設置一些限制。根據您發佈的帖子數量,超過一小時(例如)的任何內容可能都不值得重試,因爲它可能已經過時了。

+0

問題是,我不知道這可以拋出的所有異常。 看着BCL,他們所做的就是在某些驗證被破壞時不會拋出異常,但永遠不會捕捉到 – 2010-07-06 18:03:38

+0

是的,但他們通常工作在更低的水平。當您進行網絡服務呼叫時,您的下方有一大堆相當重要的技術。 – 2010-07-06 19:54:54

0

你可以做的就是在RefreshStatus中拋出一個Exception,並在循環中捕獲它。

通過捕獲異常的循環中,你可以批量發送狀態更新,只是積累的例外,因爲他們進來,

+0

我想如果是一個好的選擇,趕上循環,然後調用ErrorEvent catch – 2010-07-06 18:07:34