Итак, у меня есть следующий код:DebuggerNonUserCode не работает с асинхронным/ждут
static void Main(string[] args)
{
var test1 = GeneratedHelperSync();
var test2 = GeneratedHelperAsync().Result;
}
[System.Diagnostics.DebuggerNonUserCode]
static int GeneratedHelperSync()
{
return RealCode();
}
[System.Diagnostics.DebuggerNonUserCode]
async static Task<int> GeneratedHelperAsync()
{
// F11 steps in here!
return await Task.FromResult(RealCode());
}
private static int RealCode()
{
return 1;
}
И я F11 (шаг в) через все операторы в Visual Studio 2013. я бы ожидать, что в обоих звонки из Main(), чтобы перевести меня в оператор «return 1». Однако во втором случае он вводит меня в функцию async.
Кажется, что компилятор стирает мой DebuggerNonUserCode во время генерации асинхронного кода.
Мой вопрос: почему он это делает? Я что-то упускаю?
Что касается того, почему я хочу этого, у меня есть некоторые вспомогательные функции асинхронного программирования, которые автоматически генерируются, и я хочу, чтобы они не вступали в них все время.
Да, эта же проблема преследует связанные атрибуты ContextBoundObject с async/await: http://stackoverflow.com/q/22392997/495262 –
Кто-нибудь знает, почему сгенерированный метод не наследует атрибуты от исходного метода? – ChrFin
Кажется, что есть другие с той же проблемой, только другой атрибут! Установка атрибута в класс не решила проблему :( – dimio