Azure テーブルにすべてを格納する Logging ライブラリを構築しています。そのテーブルへの書き込みには明らかに時間がかかります (1 秒を超えることはありませんが、それでもユーザーを待たせるには長すぎます)。そのため、Log メソッドは LogResult インスタンスを返します。
public class LogResult
{
public string Id { get; set; }
public Task LoggingTask { get; set; }
public LogResult(string id, Task task)
{
Id = id;
LoggingTask = task;
}
}
そして、これが Log メソッドがどのように終了するかです
return new LogResult(id, Task.Factory.StartNew(() =>
DoLogInAzure(account, id, exception, request))
);
呼び出し元が完了するまで待機するオプションを提供するため (たとえば、コンソール アプリの場合)。私が直面している問題は、IISがユーザーに応答を返す前にそれを待つべきではないということです...そして、それを待たないと、IIS は常にタスクを実行するとは限りません。アイデアは、ユーザーにメッセージを表示することです。
IIS が応答を返した後でも、タスクが終了するまで強制的に待機させる方法はありますか? 要求を非同期で受け取る Windows サービスをコーディングする必要があるかもしれないと考えていますが、ログ エントリを追加するだけでも大変な作業のように見えます...特に IIS にそれを待機させることができる場合。
アイデアをありがとう!