#c_sharp #многопоточность
Мы запускаем параллельно 2 потока, они выполняют какую-то длительную работу. Мы знаем,
что потом А выполнится быстрее потока B. Как после завершения А передать его результат
потоку B?
Приходит в голову решение в лоб: писать результаты работы первого потока в статическую
переменную и читать ее во втором потоке. Но мне кажется есть способы получше. Может
вы знаете, как это сделать?
Ответы
Ответ 1
Правильный вариант — вовсе не работать с низкоуровневой абстракцией потока. Для возвращения значений у вас есть Task, его и используйте. Например: Task Compute() { return Task.Run(() => { int result; // длинные сложные вычисления return result; }; } Теперь этим результатом можно пользоваться: Task computeTask = Compute(); // проверить, завершились ли вычисления if (computeTask.IsCompleted) // ... // дождаться окончания работы и получить результат int result = await computeTask; Ответ 2
string s = ""; TaskA = new Task (() => { Thread.Sleep(500); //..... s = s + "Return 77 from A\n"; return 77; }); Task B= new Task(async () => { Thread.Sleep(2000); //..... var x = await A; s = s + string.Format("B got {0} from A",x); }); A.Start(); B.Start(); B.Wait(); Console.WriteLine(s);
Комментариев нет:
Отправить комментарий