2016-04-29 17 views
0

こんにちは私は、既存のWebAPIサービス内から火災を忘れてしまいたいと思います。以下のコードは、(クライアントが何らかのタスクを実行するためにサービスに接続している可能性がある)ログイベントを別のサービスに送信し、失敗した場合にクライアントにエラーを返しません。WCF例外処理を忘れる

サービスは元のタスクを引き続き実行しますが、私は単に例外をログに記録して忘れてしまいます。

私はcontinuewithを使用しましたが、これが正しい方法であるかどうか疑問に思っています。

 Task.Factory.StartNew(() => 
     { 
      var client = (HttpWebRequest) WebRequest.Create(_url); 

      client.Method = "POST"; 
      client.ContentType = "application/json"; 

      var bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(log)); 

      var requestStream = client.GetRequestStream(); 

      requestStream.Write(bytes, 0, bytes.Length); 

      requestStream.Close(); 

      var response = client.GetResponse(); 

      requestStream.Close(); 
      response.Close(); 

     }).ContinueWith((ca) => 
     { 
      if (ca.Exception != null) 
      { 
       _logger.LogException(LogLevel.Error, ca.Exception.Message, ca.Exception); 
      } 

     }, TaskContinuationOptions.OnlyOnFaulted); 

また、このように、つまり継続を使用せずに行うこともできます。あなたは、スレッドプールのスレッドで新しいタスクをキックオフし、タスクを待っていない

if (ca.Exception != null) 
{ 
    var ignoreTask = Task.Run(() => _logger.LogException(LogLevel.Error, ca.Exception.Message, ca.Exception)); 
} 

:先進

Task.Factory.StartNew(() => 
{ 
    try 
    { 
     var client = (HttpWebRequest) WebRequest.Create(_url); 

     client.Method = "POST"; 
     client.ContentType = "application/json"; 

     var bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(log)); 

     var requestStream = client.GetRequestStream(); 

     requestStream.Write(bytes, 0, bytes.Length); 

     requestStream.Close(); 

     var response = client.GetResponse(); 

     requestStream.Close(); 
     response.Close(); 
    } 
    catch(Exception e) 
    { 
     _logger.LogException(LogLevel.Error, e.message, e) 
    } 

}) 

おかげ

+1

この質問をhttp://codereview.stackexchange.com/ – prashant

+0

に投稿してください。提案をいただきありがとうございます。 –

答えて

0

では、これを行うに進みます。 try catchブロックにLogExceptionコードブロックを置き、発生した例外をすべて無視します。

ありがとう、 Soma。