Aufgabenproblem mit Powershell und TaskSchedulerC#

Ein Treffpunkt für C#-Programmierer
Guest
 Aufgabenproblem mit Powershell und TaskScheduler

Post by Guest »

Ich schreibe eine C#-Bibliothek (.NET 4.6.1), die Aufgaben verwendet, um mehrere Codeausschnitte im Hintergrund ausführen zu können. Diese Bibliothek wird von einem Powershell-Skript aufgerufen, das von einem TaskScheduler-Element ausgelöst wird.
Wenn ich Tests durchführe, indem ich Powershell starte und dann die Bibliothek aufrufe, funktioniert alles ordnungsgemäß. Über den TaskScheduler funktioniert es jedoch nicht und ich kann dieses Verhaltensproblem mit einer Konsolenanwendung reproduzieren.
Hauptbibliotheksthread:

Code: Select all

public class MainLibrary {
private static HttpClient g_httpclient_Main = new HttpClient();
private static List g_list_Tasks = new List();

public void EntryPoint() {
SetupTasks();

foreach (Task _t_List in g_list_Tasks)
{
_t_List.Start();
}
Task.WaitAll(g_list_Tasks.ToArray());
}
}
Jede der Aufgaben wurde vor der foreach-Schleife in einer separaten Funktion/Methode der MainLibrary-Klasse wie folgt erstellt:

Code: Select all

private void SetupTasks() {
Task _task_TollGate = new Task(() =>
{
QueueEndpointCall();
});
g_list_Tasks.Add(_task_TollGate);
}

private async Task QueueEndpointCall()
{
try {
HttpResponseMessage _httprm = await g_httpclient_Main.GetAsync("http://www.google.com");
_string_HTTP = await _httprm.Content.ReadAsStringAsync();
....other code
}
catch (Exception e) {
File.WriteLine...
}
}
Wenn ich die Konsolenanwendung ausführe und einen Haltepunkt setze, springt GetAsync zurück zum Hauptthread, wenn ich es richtig verstehe. Wenn ich dann auf die Zeile „Task.WaitAll“ klicke, scheint die Hintergrundaufgabe abgeschlossen zu sein, aber der Platzhalter, den ich im Snippet „...anderer Code“ habe, wird nicht ausgeführt. Das manuelle Starten von Powershell und das Aufrufen der Bibliothek funktioniert einwandfrei.
Irgendwelche Vorschläge hier? Ich denke darüber nach, ein Upgrade auf .NET v8.0 durchzuführen, verfüge jedoch derzeit nicht über die Ressourcen dafür und würde dies gerne in .NET 4.6.1 zum Laufen bringen.
Bearbeiten (7. Januar 2025) – Ich bin erfolglos auf .NET 8 migriert und habe sogar den Vorschlag ausprobiert, HttpClient lokal zu deklarieren, obwohl ich nicht glaube, dass das das Problem ist, und der „...andere Code“ ist es immer noch nicht hingerichtet wird. Ich glaube, dass ein Fehler verschluckt wird, da ich keine Fehlerprotokolldatei von try/catch sehe, die den HttpClient-Aufruf umschließt.
Vielen Dank.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post