2013-03-12 118 views
2

我在异步环境(Silverlight)中工作,并使用Logger服务来存储服务器端的异常。在catch块中调用异步方法

考虑以下代码:

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

记录器看起来是这样的:

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

如果我写的代码如上(连追在异步方法),我不能把等待在那里。 如果我离开它,我会得到警告,继续执行,等等,等等。这很好,我不在乎。我只需要记录错误。

我可以只是抑制这个警告,或者我应该想出更好的模式吗?

+0

你想要做的,如果什么'LogAsync'彻底失败?您可能希望有一个观察故障任务的备份计划。 – 2013-03-12 22:21:31

+0

@JonSkeet我以这种方式代码LogAsync,我“吃”异常 - 这是最后的手段。 – katit 2013-03-12 22:26:01

+1

@katit:在这种情况下,您可能想*考虑*将返回类型更改为'void'。这非常*非常不是一个好主意,但是如果你真的*希望它完全“消失并忘记”,它就会起作用。 – 2013-03-12 22:28:50

回答

1

既然你是绝对肯定要从LogAsync忽略完成/错误,你可以这样做简单的解决方法:

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