2016-11-18 13 views
1

HttpClientを使用するターゲットを作成する必要があります。 HttpClientには同期メソッドは含まれていませんが、すべてTask非同期呼び出しを返します。これをNLogターゲットで使用する最善の方法は何ですか、apiは非同期/認識待ちのように見えますか?NLogターゲットのHttpClient

答えて

1

多分、

public class CustomTarget : Target 
{ 

protected override async void Write(NLog.Common.AsyncLogEventInfo logEvent) 
{ 
    try 
    { 
      await WriteAsync(logEvent.LogEvent).ConfigureAwait(false); 
      logEvent.Continuation(null); 
    } 
    catch (Exception ex) 
    { 
      InternalLogger.Error(ex, "Failed to sent message"); 
      logEvent.Continuation(ex); 
    } 
} 

} 

それとも、このPRからコードを盗む:https://github.com/NLog/NLog/pull/2006

1

シンプルにするには、async-taskでWait()を実行します。次に、AsyncTargetWrapperを使用してカスタムターゲットをラップします。次に、アクティブなhttpリクエストが多すぎることを心配する必要もありません。

しかし、NLogは、遅延ログ書き込み操作を実行するターゲットには問題ありません。唯一の必要な契約は、LogEventInfoと共に提供される非同期継続が、遅延ログ書き込み操作が最終的に完了した後に呼び出されることです(ネットワークターゲットのインスピレーションを参照してください)

+0

多分それはまた、ターゲットに 'Tasks'を格納するオプションだと' 'FlushAsync'でそれらをawait'? – Julian

+0

@Julianタスクベースの非同期メソッドをサポートするためにNLogを更新する計画はありますか? – Dismissile

+0

@Dismissile NLog ver。 4.4.6にはhttps://github.com/NLog/NLog/blob/master/src/NLog/Targets/AsyncTaskTarget.csが含まれています –

関連する問題