У меня есть 2 длительных метода, которые получают данные из внешних источников и возвращают результаты в виде списков:
public static class Helper1
{
public static List<X> GetStuff()
{
// some long running stuff
}
}
public static class Helper2
{
public static List<Y> GetStuff()
{
// some long running stuff
}
}
Я хотел бы запускать их параллельно, а не последовательно. Моя первая попытка:
var task1 = new Task> (() => Helper1.GetStuff ()); var task2 = new Task> (() => Helper2.GetStuff ());
var whenAllTask = Task.WhenAll(task1, task2);
task1.Start();
task2.Start();
Кажется, ничего не происходит, и мне интересно, как я могу получить доступ к содержимому списков впоследствии (программа продолжается последовательно). Спасибо!
PS:
Сейчас я использую следующий код, учитывая ответ Робина Б.:
var task1 = new Task<List<X>>(() => Helper1.GetStuff(), TaskCreationOptions.LongRunning);
var task2 = new Task<List<Y>>(() => Helper1.GetStuff(), TaskCreationOptions.LongRunning);
var whenAllTask = Task.WhenAll(task1, task2).Wait();
List<X> lst1 = task1.Result;
List<Y> lst2 = task2.Result;
К сожалению, ничего не происходит, похоже, застрял.
PPS:
Мне кажется, это работает:
var task1 = Task.Factory.StartNew<List<X>>(() => Helper1.GetStuff(), TaskCreationOptions.LongRunning));
var task2 = Task.Factory.StartNew<List<Y>>(() => Helper2.GetStuff(), TaskCreationOptions.LongRunning);
var allTasks = new Task[] { task1, task2 };
Task.WaitAll(allTasks);
List<X> lst1 = task1.Result;
List<Y> lst2 = task2.Result;