В базовом классе определяю:
public virtual async Task<int> GetС() { return 0; }
Предупреждение: "В данном асинхронном методе отсутствуют await операторы поэтому метод будет выполняться синхронно."
А методы в производных классах,
public override async Task<int> GetС() { ... }
в которых есть await будут выполняться асинхронно, если в вызове указывать базовый класс?
Здравствуйте, Passerby, Вы писали:
P>В базовом классе определяю:
P>P>public virtual async Task<int> GetС() { return 0; }
P>
P>Предупреждение: "В данном асинхронном методе отсутствуют await операторы поэтому метод будет выполняться синхронно."
P>А методы в производных классах,
P>P>public override async Task<int> GetС() { ... }
P>
P>в которых есть await будут выполняться асинхронно, если в вызове указывать базовый класс?
Для экземпляра подкласса всегда вызывается его реализация метода, независимо от типа ссылки.
Здравствуйте, Passerby, Вы писали:
P>В базовом классе определяю:
P>P>public virtual async Task<int> GetС() { return 0; }
P>
P>Предупреждение: "В данном асинхронном методе отсутствуют await операторы поэтому метод будет выполняться синхронно."
Вообще, ты можешь его просто описать как
public virtual Task<int> GetС() { return Task.FromResult(0); }
Без await. А в наследниках уже ставить async если есть необходимость желание. Сигнатура говорит что тут Task, а async это деталь реализации как Task получить.
P>А методы в производных классах,
P>P>public override async Task<int> GetС() { ... }
P>
P>в которых есть await будут выполняться асинхронно, если в вызове указывать базовый класс?
Будет вызываться собственная реализация наследника, такая, какая она есть. Что там в предке в данном случае неважно.