我有一个方法需要尝试更新我的推特状态。我会发送很多消息,如果某条消息出错,我想继续。
今天我抓住了一切,但我不喜欢。也许我应该把这个问题放在来电者身上?或者返回异常而不是bool?
public bool RefreshStatus(string status, out Status newStatus)
{
try
{
newStatus = twitterContext.UpdateStatus(status);
return true;
}
catch
{
newStatus = null;
return false;
}
}
我在for中调用此方法。 我看到像Int32.TryParse这样的方法,他们不这样做,只是忽略验证(在这种情况下我没有)
答案 0 :(得分:0)
您可以实现此方法的两个版本:
public bool TryRefreshStatus(string status, out Status new Status)
和
public Status RefreshStatus(string status)
第一个可以在try / catch块中调用第二个,如果抛出异常则返回false。您应该只捕获您希望从状态更新中抛出的异常,而不是所有异常(例如,不是System.Exception)。
要解决推送大量更新的问题,我建议您创建一个添加更新的队列(先进先出)。然后,有一个工作线程试图将这些更新发布到Twitter。更新成功后,您可以将其从队列中删除。否则,你可以继续尝试。
您可能希望对重试次数或状态更新的最长期限设置一些限制。根据您发布的数量,超过一小时(例如)的任何内容可能都不值得重试,因为它可能已经过时了。
答案 1 :(得分:0)
你可以做的是在RefreshStatus中抛出一个异常并在循环中捕获它。
通过捕获循环内的Exception,您可以批量发送状态更新,并在它们进入时累积异常。
答案 2 :(得分:0)
实际上,TryParse(在Int32,Single等)执行的操作不是抛出异常,而是捕获在被调用方法中抛出的异常。
我真正需要的是twitterContext.TryUpdateStatus(status);