2016-05-19 23 views
2

ExceptionLogger for WebApiを実装しています。例外はデータベースに記録されます。非同期からのvoid syncメソッドの呼び出し - voidを待つことができません

public class CustomExceptionLogger : ExceptionLogger 
{ 
    public override async Task LogAsync(ExceptionLoggerContext context, CancellationToken cancellationToken) 
    { 
     var log = new Logger(); 
     await log.LogMessage(context.Exception); --Cannot await 'void' complie time error here 
    } 
} 

public class Logger 
{ 
    public void LogMessage(Exception ex) 
    { 
    //code to insert message into db 
    } 
} 

これを修正するにはどうすればよいですか?

+0

なぜLogAsyncを非同期にする必要がありますか? –

+2

'待ち時間Task.Run(()=> log.LogMessage(context.Exception))'? –

+0

@ Yacoub Massad - 私のログメッセージにはデータベース操作が含まれているので、私はLogAsyncを非同期にしたい – user472269

答えて

2

あなたが本当にLogMessageには、()非同期とawaitableになりたい場合は、あなたがこのような何かに見えるようにコードを変更する必要があります:それはあらゆる使用のものにするため

public class Logger 
{ 
    public async Task LogMessage(Exception ex) 
    { 
    //code to insert message into db 
    } 
} 

を、あなたのデータベースの挿入コード必要がありますまた非同期です。

+2

データベース操作が非同期で行われない場合、同期コードを 'Task.Run'でラップしてそれを待ちますか? –

+0

良い点。 :)編集中。 –

+0

あなたの編集は問題を解決しません。あなたはまだ 'Task.Run'で同期コードをラップしています。これを見てください:http://www.ben-morris.com/why-you-shouldnt-create-asynchronous-wrappers-with-task-run/ –

関連する問題