Может ли один и тот же поток одновременно ждать и запускать задачу?C#

Место общения программистов C#
Ответить
Anonymous
 Может ли один и тот же поток одновременно ждать и запускать задачу?

Сообщение Anonymous »

Я следую пошаговому руководству: отладка параллельного приложения в Visual Studio из документации Microsoft.
А в разделе об окне параллельных задач при достижении третьей точки останова четко говорится:

В этом примере обратите внимание, что задача 11 и задача 12 выполняются в одном потоке (покажите столбец «Назначение потока», если он скрыт).
Окно задач
В «Окне задач» мы видим, что задача 11 «Заблокирована», а задача 12 — «Активна».
Если мы перейдем к местоположению задачи 11 это метод "O", мы видим, что он заблокирован в строке t5.Wait();

Код: Выделить всё

static void O(object o)
{
Task t5 = Task.Factory.StartNew(P, TaskCreationOptions.AttachedToParent);
t5.Wait(); // tasks 11 blocked here
R(o);
}
а затем, проверив «Окно задач», мы видим, что в одном и том же потоке (27500) есть две задачи: задача 11, которая блокируется вызовом t5.Wait() и задача 12, которая активна и запускает метод «P» как новую задачу. Но как это возможно, что один поток заблокировал задачу и одновременно запускает другую?
Я отлаживал это пошаговое руководство несколько раз, и мне удалось повторить одно и то же поведение только один раз случайным образом. В других случаях я видел, как мне казалось, правильное поведение, когда задача с методом «P» всегда выполняется в другом потоке.
Локальная отладка окна задач
Я думал, когда поток вызывает задачу Метод «Подождите», поток блокируется до завершения задач?
Что я здесь пропустил?

Подробнее здесь: https://stackoverflow.com/questions/764 ... ltaneously
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»