Сборка дополнительного CSS-файла в угловой сборке

Ваш код легко воспроизводит проблему в сборке «Debug» , используя Visual Studio 2015. Мне нужно было только добавить Program.Main(), с вызовом DoSomeWork().Wait();, установить точку останова в методе и пройти через него.

Что касается того, почему это происходит, это, несомненно, связано с тем, что была переписана комбинация метода async и создана отладочная база данных (.pdb). Подобно методам итератора, добавление async к методу заставляет компилятор изменить ваш метод на конечный автомат. Фактический генерируемый IL выглядит лишь немного похожим на оригинальный метод. То есть, если вы посмотрите на него, вы можете определить ключевые компоненты исходного кода, но теперь он находится в большом switch заявлении, который обрабатывает то, что происходит, когда метод возвращается в каждом операторе await введенный с завершением каждого ожидаемого выражения.

Когда оператор программы находится в throw, он действительно находится в неявном выражении return в методе. Дело в том, что база данных отладки для исполняемого файла не предоставляет программную инструкцию для этой строки.

При отладке есть подсказка, что это то, что происходит. Когда вы переходите через инструкцию if, вы заметите, что она идет прямо в инструкцию throw. Если блок оператора if был введен действительно , следующая строка оператора программы будет фактически открытой скобкой для блока, а не оператором программы.

Вы также можете добавить например a Console.WriteLine() в конце метода, и это даст отладчику достаточную информацию для синхронизации и не покажет вам неправильный номер строки.

Дополнительные сведения о том, как обрабатываются методы async компилятором, см. Является ли новая функция асинхронности C # реализована строго в компиляторе и предоставляемых там ссылках (включая серии статей Джона по этой теме).

1
задан bilal.haider 25 March 2019 в 09:41
поделиться