忽略Web服务错误。 TryXXX模式

时间:2010-07-06 17:47:22

标签: c# rest web-services

我有一个方法需要尝试更新我的推特状态。我会发送很多消息,如果某条消息出错,我想继续。

今天我抓住了一切,但我不喜欢。也许我应该把这个问题放在来电者身上?或者返回异常而不是bool?

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

我在for中调用此方法。 我看到像Int32.TryParse这样的方法,他们不这样做,只是忽略验证(在这种情况下我没有)

3 个答案:

答案 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);