Heim >Backend-Entwicklung >C++ >Wie kann ich rekursiv asynchronen Aufgaben in ASP.NET Core rekursiv planen?
ASP.NET Core-Anwendungen erfordern häufig die regelmäßige Ausführung von Hintergrundaufgaben, ohne dass dies Auswirkungen auf Benutzeranforderungen hat. In diesem Artikel wird eine Lösung zum Erstellen einer wiederkehrenden asynchronen Aufgabe untersucht, ähnlich dem setInterval()
.
Die Herausforderung:
Ziel ist es, regelmäßig eine asynchrone Methode auszuführen (z. B. gesammelte Daten an einen Remote-Dienst zu senden), ohne Benutzerinteraktionen zu blockieren. Die Schwierigkeit besteht darin, diese asynchrone Aufgabe angemessen zu planen.
Eine einfache Lösung (mit Einschränkungen):
Die-Klasse von Timer
.NET bietet mithilfe ihres Elapsed
-Ereignisses einen unkomplizierten Ansatz. Allerdings ist die erforderliche Signatur (void MethodName(object e, ElapsedEventArgs args)
) nicht mit einer async
Methodensignatur (async Task MethodName(object e, ElapsedEventArgs args)
) kompatibel.
Problemumgehung mit Task.Delay()
:
Diese Inkompatibilität kann mithilfe einer while
-Schleife und Task.Delay()
behoben werden, die intern einen Timer verwendet:
<code class="language-csharp">public async Task PeriodicFooAsync(TimeSpan interval, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { await FooAsync(); await Task.Delay(interval, cancellationToken); } }</code>
Dies führt effektiv FooAsync()
zum angegebenen interval
aus. Der entscheidende Zusatz ist cancellationToken
, der eine ordnungsgemäße Beendigung von Aufgaben ermöglicht, was besonders wichtig beim Herunterfahren der Anwendung ist.
Wichtige Überlegungen für ASP.NET Core:
Obwohl dieser Ansatz in allgemeinen .NET-Anwendungen funktioniert, ist in ASP.NET Core Vorsicht geboten. Der „Fire-and-Forget“-Charakter dieser Methode kann zu Problemen führen. Für eine robuste Hintergrundaufgabenverwaltung in ASP.NET Core sollten Sie etablierte Lösungen wie Hangfire oder die Techniken in Betracht ziehen, die in Stephen Clearys „Fire and Forget on ASP.NET“ und Scott Hanselmans „How to run Background Tasks in ASP.NET“ beschrieben werden. Diese Ressourcen bieten ausgefeiltere und zuverlässigere Methoden für die Handhabung lang laufender oder asynchroner Hintergrundprozesse innerhalb der ASP.NET Core-Umgebung.
Das obige ist der detaillierte Inhalt vonWie kann ich rekursiv asynchronen Aufgaben in ASP.NET Core rekursiv planen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!