Если я создаю простой класс следующим образом:
public class TestClass
{
public Task TestMethod(int someParameter)
{
return Task.FromResult(someParameter);
}
public async Task TestMethod(bool someParameter)
{
await Task.FromResult(someParameter);
}
}
и рассмотрим его в NDepend, он показывает, что TestMethod
, берущий bool и являющийся async Task
, имеет структуру, сгенерированную для него с помощью счетчика, машины состояния перечислителя и некоторых дополнительных материалов.
Почему компилятор генерирует структуру с именем TestClass+<TestMethod>d__0
с перечислителем для метода async?
Кажется, что генерирует больше ИЛ, чем то, что производит настоящий метод. В этом примере компилятор генерирует 35 строк IL для моего класса, тогда как он генерирует 81 строку IL для структуры. Это также увеличивает сложность скомпилированного кода и заставляет NDepend указывать его для нескольких нарушений правил.