Рассмотрим:
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
C c = new C();
c.FooAsync(); // warning CS4014: Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call.
((I)c).FooAsync(); // No warning
}
}
class C : I
{
public async Task FooAsync()
{
}
}
interface I
{
Task FooAsync();
}
Если я вызываю метод async непосредственно на объект c
, я получаю предупреждение о компиляторе. Там потенциально ошибка здесь, поэтому я рад за предупреждение.
Однако, если я делаю тот же вызов по методу интерфейса, я не получаю предупреждения. Было бы легко пропустить пропущенную ошибку в этом коде.
Как я могу гарантировать, что я не ошибаюсь? Есть ли образец, который я могу применить для защиты себя?