Verhindern Sie, dass IIS eine Aufgabe beendet, bevor sie beendet wird

Ich erstelle eine Protokollbibliothek, in der alles in einer Azure-Tabelle gespeichert ist. Das Schreiben in diese Tabelle nimmt offensichtlich viel Zeit in Anspruch (niemals länger als 1 Sekunde, aber es ist immer noch zu viel, um den Benutzer warten zu lassen). Daher gibt die Log-Methode eine LogResult-Instanz zurück. Hier ist die Klasse

public class LogResult
{
    public string Id { get; set; }
    public Task LoggingTask { get; set; }

    public LogResult(string id, Task task)
    {
        Id = id;
        LoggingTask = task;
    }
}

Und so endet die Log-Methode

return new LogResult(id, Task.Factory.StartNew(() => 
    DoLogInAzure(account, id, exception, request))
);

Geben Sie dem Anrufer die Möglichkeit, auf den Abschluss zu warten (z. B. bei einer Konsolen-App). Das Problem, mit dem ich konfrontiert bin, ist, dass IISsollte nicht Warten Sie darauf, bevor Sie dem Benutzer die Antwort zurückgeben ... und wenn ich nicht darauf warte, tut IIS dies nichtimmer Führen Sie die Aufgabe aus. Die Idee ist, dem Benutzer die Nachricht "... Wenn Sie mit uns Kontakt aufnehmen, geben Sie unbedingt Ihre Ausgabenummer XXX an" und lassen Sie ihn nicht warten, bis der Protokolleintrag geschrieben wurde.

Gibt es eine Möglichkeit, IIS zu zwingen, zu warten, bis die Aufgabe abgeschlossen ist, auch nachdem die Antwort zurückgegeben wurde? Ich denke, ich muss möglicherweise einen Windows-Dienst codieren, der die Anforderung asynchron verarbeitet, aber das Hinzufügen eines Protokolleintrags scheint sehr aufwändig zu sein. Dies gilt insbesondere dann, wenn ich IIS zwingen kann, darauf zu warten.

Vielen Dank für alle Ideen!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage