Я занимаюсь многозадачностью и пробовал этот код, но он не работает, как я ожидал.Почему этот код не возвращает ожидаемый результат?
Я ожидал, что workTask начнет первую печать «работать ...» по всему циклу, затем продолжит работу с newTask и напечатает «moreWorkThread: working ...» в течение всего цикла. Сначала я подумал, что «workThread: Done» будет напечатан в конце, но затем я понял из вывода, что он может работать в любое время между другими.
Я вообще не понимаю остальное поведение.
newTask не запускается вообще, и цикл в someWork никогда не завершается.
Может кто-нибудь, пожалуйста, объясните мне это? Я хочу знать, почему этот код ведет себя так, что и модов я могу сделать, чтобы дать ожидаемой выходной
- запустить someWork
- завершения цикла
- ContinueWith moreWork
полный цикл. Выход
public static void Main() { Task workTask = new Task(someWork); workTask.Start(); Console.WriteLine("WorkThread: Done!"); Task newTask = workTask.ContinueWith(moreWork); } static public void someWork() { for(int i = 0; i < 16; i++) { Console.WriteLine("WorkThread: working..."); } } static public void moreWork(Task task) { for(int i = 0; i < 8; i++) { Console.WriteLine("moreWorkThread: working..."); } }
образец:
WorkThread: Готово!
WorkThread: работа ...
WorkThread: работа ...
Добро пожаловать в Переполнение стека. К сожалению, вы не сказали нам, что вы ожидали или что видели, что очень затрудняет «объяснить» что угодно ... но вы включили (почти) полную программу, что является хорошим началом. Просто уточните, что вы ожидали, и я уверен, что мы сможем помочь. –
извините ... редактирование сейчас .... –
Следует отметить, что основной поток не дожидается, когда потоки потоков будут завершены до их существования. Это означает, что приложение прекратится до того, как что-нибудь полезное произойдет. Попробуйте положить Console.ReadLine в конце метода 'main'. –