2013-03-12 3 views
2

Я работаю в среде async (Silverlight) и имею службу Logger, которую я использую для хранения исключений на стороне сервера.Вызов метода async в блоке catch

Рассмотрим этот код:

catch (Exception ex) 
    { 
     this.loggerService.LogAsync(ex, "NotesService"); 
    } 

Logger выглядит следующим образом:

public interface ILoggerService 
    { 
     Task LogAsync(Exception ex, string tag); 
    } 

Если я пишу код, как описано выше (даже Загвоздка в методе асинхронном) я не могу поставить ждать там. Если я оставлю это, я получаю предупреждение, что исполнение продолжается, бла, бла. Это нормально, мне все равно. Мне просто нужно получить сообщение об ошибке.

Могу ли я просто подавить это предупреждение или мне придумать лучший образец для этого?

+0

Что вы хотите делать, если 'LogAsync' терпит неудачу полностью? Возможно, вам понадобится план резервного копирования для наблюдения за неисправной задачей. –

+0

@JonSkeet I code LogAsync таким образом, где я «ем» исключение - это последнее средство .. – katit

+1

@katit: В этом случае вы можете * рассмотреть * изменение типа возврата на 'void'. Это очень * очень редко редко получается, но если вы действительно хотите, чтобы он был полностью «огнем и забыл», он будет работать. –

ответ

1

Поскольку вы абсолютно уверены, что вы хотите игнорировать завершающие/ошибки из LogAsync, вы можете сделать это простой обходной путь:

catch (Exception ex) 
{ 
    var _ = this.loggerService.LogAsync(ex, "NotesService"); 
} 
Смежные вопросы