У меня есть DLL, которая имеет public Task<>
метод, который возвращает return Task.Factory.StartNew(() => ...)
. Я называю это в рамках программы, и я хочу, чтобы программа дождалась завершения выполнения задачи, прежде чем она продолжит делать другие вещи. Я добавил Thread.Sleep(6000)
в DLL, чтобы имитировать более длительное выполнение.C# wait DLL async метод для завершения
Когда я звоню его как этот
var invokedTask = myMethod.Invoke(Activator.CreateInstance(myClass), myParams);
Он просто продолжает с исполнением (как и ожидалось). Но затем я попробовал это:
var invokedTask = Task.Factory.StartNew(() => myMethod.Invoke(Activator.CreateInstance(myClass), myParams));
invokedTask.Wait();
И это не работает. Как я могу заставить его ждать из-за пределов DLL?
Во втором примере вы создаете * новую * 'Задачу'. Единственное задание, которое вы даете этой задаче, - запустить функцию 'myMethod' и * игнорировать * задачу, которую она возвращает. Поэтому, конечно, что «Задача» не займет много времени. Почему вы не просто 'Wait'' invokedTask' в первом примере? –
Пробовал это уже, но 'invokedTask' не типа' Task', а 'object' – Norgul
Но это действительно' Задача'. Все, что вам нужно, это бросить - не сбивать с толку создание большего количества 'Task'. –