Игнорирование ошибок веб-сервиса.TryXXX шаблон - PullRequest
0 голосов
/ 06 июля 2010

У меня есть метод, который должен попытаться обновить мой статус в Твиттере.Я отправлю много сообщений, и я хочу продолжить, если какое-нибудь сообщение выдает ошибку.

Сегодня я ловлю все, но мне не нравится.Может стоит поставить этот улов на звонящего?Или вернуть исключение вместо bool?

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

Я вызываю этот метод внутри для.Я вижу такой метод, как Int32.TryParse, и они этого не делают, просто игнорируют проверки (у меня нет в этом случае)

Ответы [ 3 ]

0 голосов
/ 06 июля 2010

Что вы можете сделать, это создать исключение в RefreshStatus и перехватить его внутри цикла.

Перехватив исключение внутри цикла, вы можете отправлять обновления состояния в пакетном режиме и просто накапливать исключения по мере их поступления..

0 голосов
/ 12 ноября 2010

На самом деле то, что делает TryParse (в Int32, Single и т. Д.), Не генерирует исключения, но не перехватывает исключения, создаваемые в вызываемом методе.

Что мне действительно нужно, так это twitterContext.TryUpdateStatus (status);

0 голосов
/ 06 июля 2010

Вы можете реализовать две версии этого метода:

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

и

public Status RefreshStatus(string status)

Первая может вызвать вторую в блоке try / catch и вернуть false, если исключение составляетвыброшены.Вы должны ловить только те исключения, которые вы ожидаете получить от обновления статуса, а не все исключения (например, не System.Exception).

Чтобы решить проблему с выпуском большого количества обновлений, я бы предложил создать очередь (первым пришел, первым вышел), в которую вы добавляете свои обновления.Затем создайте рабочий поток, который пытается опубликовать эти обновления в Twitter.После успешного обновления вы можете удалить его из очереди.В противном случае вы можете продолжать пытаться.

Возможно, вы захотите ограничить количество повторных попыток или максимальный срок обновления статуса.В зависимости от того, сколько вы публикуете, все, что старше часа (например), может не стоить повторять, поскольку это может быть уже слишком устаревшим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...