Виртуальный асинхронный метод в базовом классе
От: Passerby  
Дата: 01.11.20 13:27
Оценка:
В базовом классе определяю:
public virtual async Task<int> GetС() { return 0; }

Предупреждение: "В данном асинхронном методе отсутствуют await операторы поэтому метод будет выполняться синхронно."
А методы в производных классах,
public override async Task<int> GetС() { ... }

в которых есть await будут выполняться асинхронно, если в вызове указывать базовый класс?
Re: Виртуальный асинхронный метод в базовом классе
От: Qulac Россия  
Дата: 01.11.20 13:36
Оценка: 2 (1)
Здравствуйте, 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 будут выполняться асинхронно, если в вызове указывать базовый класс?

Для экземпляра подкласса всегда вызывается его реализация метода, независимо от типа ссылки.
Программа – это мысли спрессованные в код
Re: Виртуальный асинхронный метод в базовом классе
От: fmiracle  
Дата: 01.11.20 13:56
Оценка: 2 (1) +3
Здравствуйте, 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 будут выполняться асинхронно, если в вызове указывать базовый класс?

Будет вызываться собственная реализация наследника, такая, какая она есть. Что там в предке в данном случае неважно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.