2013-03-12 115 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"); 
}