Ich habe eine DLL, die public Task<>
Methode hat, die return Task.Factory.StartNew(() => ...)
zurückgibt. Ich rufe es innerhalb eines Programms an und möchte, dass das Programm darauf wartet, dass die Ausführung der Aufgabe beendet wird, bevor es mit anderen Dingen fortfährt. Ich habe Thread.Sleep(6000)
zu der DLL hinzugefügt, um längere Ausführung zu simulieren.C# warten DLL async Methode zu beenden
Wenn ich es wie dies
var invokedTask = myMethod.Invoke(Activator.CreateInstance(myClass), myParams);
Aufruf Weiter geht es nur mit der Ausführung (wie erwartet). Aber dann habe ich das versucht:
var invokedTask = Task.Factory.StartNew(() => myMethod.Invoke(Activator.CreateInstance(myClass), myParams));
invokedTask.Wait();
Und es funktioniert nicht. Wie kann ich es von außerhalb der DLL warten lassen?
In Ihrem zweiten Beispiel erstellen Sie eine * neue * 'Aufgabe'. Der einzige Job, den Sie dieser Aufgabe zuweisen, besteht darin, die Funktion "myMethod" auszuführen und die zurückgegebene Aufgabe zu ignorieren. Diese "Aufgabe" dauert natürlich nicht lange. Warum "wait" '' aufgerufeneTask' in deinem ersten Beispiel nicht? –
Versuchte es bereits, aber 'aufgerufeneTask' ist nicht von' Task' Typ, sondern 'Objekt' – Norgul
Aber es ist wirklich eine' Aufgabe'. Alles, was Sie brauchen, ist eine Besetzung - nicht meckern über das Erstellen von mehr Aufgaben. –