ログライブラリを作成しましたが、ログメソッドはエラー番号(PK)を返します.DBに入力すると、エラーメッセージの一部としてユーザーに通知されますUI。彼らはさらに、チームをサポートするために話すときに、そのキーを参照として使用します。非同期メソッドでの非同期ライブラリメソッドの使用
そして、私は以下のように、同じことを行うための非同期メソッドを持っています。
public class Logger
{
public async Task<string> LogAsync(Exception ex)
{
return await DoLogAsync(ex);
}
// some private method, with multiple optional parameters
private Task<string> DoLogAsync(Exception ex)
{
return Task.Run(() => Log(ex));
}
}
注:私は認めざる、この非同期バージョンは何もありませんが、単に同期方法、ログ(ラップ)、タスクに。私は確信していません、他に何をすべきです!
今、私は以下のように、すべての私のAPIに上記ログイン()メソッドを、使用することを計画しています:
public Result<MyObject> Get()
{
var result = new Result<MyObject>();
try
{
throw new DivideByZeroException();
}
catch (DivideByZeroException ex)
{
string errorId = await _logger.LogAsync(ex);
response.AddErrorMessage("Please Contact Admin with this error #"+errorId);
}
return result;
}
仕事の上にするために、私はAPIメソッドの非同期を行う必要があり、私はロガーコールを待っているからです。
- Loggerのためだけに、私のAPIコールasyncを変更しないようにするにはどうすればよいですか?この仕事をする他の可能性は何ですか?
LogAsync()
は本当に有益でしょうか?私のUIスレッドは、エラー番号が返されるのを待っているので、なぜsyncメソッドを呼び出さないのですか?Log()
のメソッドはほとんどありません。エラー番号は必要ありませんが、代わりにlog-and-forgetの種類があります。このようなシナリオでは、非同期バージョンが役立つと思いますが、UIでは何も期待していないでしょうか?
回答:質問1の場合、この作品:Waiting for async/await inside a task
をまた2、および3のために、あなたの場合はADO.Netの実装はかなりTask.Run
が、これはWebアプリケーションですか? – JohanP
これはC#です...タグの中に入れてください:) – ymz
C#は言語です。 ASP.NetアプリケーションとWeb APIにはC#を使用できます。 – JohanP