Пропускаются точки останова

Рейтинг: 0Ответов: 2Опубликовано: 11.03.2015

Здравствуйте.

Ставлю точку останова на методе Foo1(), который содержит в себе вызов в цикле var x=await Foo2(), на которую тоже ставлю точку останова. При достижении программой точки останова на Foo2() нажимаю F10. При этом программа возвращается на точку Foo1(), не останавливаясь на строках кода, которые идут после Foo2(). Раньше было какое-то сообщение об отсутствующих символах отладки в программе, но сейчас его нет.

В чем может быть проблема и как её решить? Спасибо.

internal async static Task Dosmth()
    {            
        for (int i = 0; i < ownersCount; i++)
        {
            Foo1(i+1);                
        }           
    }
private async static void Foo1(int id)
    {
        CompanionId[] companions 
            = await Foo2(id);

        for (int i = 0; i < companions.Length;i++ )
        {
            fun();
         }
     }

Ответы

▲ 2Принят

Ничего удивительного - если понимать, как работает await. Когда вы нажимаете F10, происходят две вещи: 1. вызывается Foo2, 2. и сразу же происходит выход из Foo1.

Выполнение Foo1 продолжится после завершения задачи, которую вернула Foo2. Но эта задача выполнится только через некоторое время - а вот новый вызов Foo1 происходит сразу же. Поэтому и срабатывает точка останова.

Если вам надо этот код как-то отладить, попробуйте настроить HitCount на вашей точке останова, чтобы она срабатывала только на первой итерации.

▲ 1

Уберите await и так попробуйте продебажить. Также попробуйте точку остановка поставить внутри Foo2().