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)
}
})
おかげ
この質問をhttp://codereview.stackexchange.com/ – prashant
に投稿してください。提案をいただきありがとうございます。 –