Ich habe this documentation gelesen, die besagt, dass mit HostingEnvironment.QueueBackgroundWorkItem
Aktion ausgeführt wird:Verzögert HostingEnvironment.QueueBackgroundWorkItem das Recycling wirklich?
in diesem ASP.NET von einem normalen Thread Workitem Unterscheidet sich verfolgen, wie viele Arbeitseinheiten registriert durch diese API sind derzeit am Laufen halten können und Die ASP.NET-Laufzeit versucht, das Herunterfahren von AppDomain zu verzögern, bis die Ausführung dieser Arbeitsaufgaben abgeschlossen ist. Diese API kann nicht außerhalb einer ASP.NET-verwalteten AppDomain aufgerufen werden. Das bereitgestellte CancellationToken wird beim Herunterfahren der Anwendung signalisiert. i gezwungen, ein Recycling durch den IIS-Manager
private void Check() { HostingEnvironment.QueueBackgroundWorkItem(ct => CheckRecyclingBehaviour(ct));} } private async void CheckRecyclingBehaviour(CancellationToken ct) { while (true) { await Task.Delay(1000); if (ct.IsCancellationRequested) { AppendToFile("Recycling soon..."); await Task.Delay(1000); AppendToFile("But we still have time to finish..."); break; } } }
I
check()
(IIS 7) und nach einer gewissen Zeit ausgeführt haben:
Also habe ich diesen Beispielcode geschrieben.
Schließlich habe ich die debug.txt-Datei überprüft und es enthielt eine einzige Zeile: "Recycling bald ...".
Also ich denke, die CancellationToken wurde signalisiert, aber die AppDomain Shutdown wurde nicht wirklich verzögert (da der zweite Druck nie passiert ist).
Es scheint ziemlich seltsam, vor allem in Anbetracht mehrerer Beiträge, die ich gelesen habe, die sagen, dass die recycling will be delayed by 30 seconds.
Fehle ich etwas?
Eigentlich weiß ich nicht, ob das es vollständig beheben wird, kann ich falsch liegen, aber ich denke, die Kraft recyceln nicht Aufgaben im 'QueueBackgroundWorkItem' respektieren, nur wenn es" natürlich passiert "respektiert es die Warteschlange . Wenn man es in eine "Task" umwandelt, wird es für einen normalen Recyclingvorgang repariert, aber ich denke immer noch, dass ein erzwungener Recyclingvorgang sich genauso verhält. –
Danke, ich wechselte zu 'Task' und es funktionierte. Scott, danke für die Warnung, aber glücklicherweise respektiert die Zwangsrecycling die laufende Aufgabe. – oavraham