Implementação síncrona da interface que retorna Tarefa
Igual aImplementando uma Interface que Requer um Tipo de Retorno de Tarefa no Código Síncrono embora eu esteja curioso para ignorar o erro do compilador que minha situação gera.
Digamos que eu tenho uma interface como esta:
public interface IAmAwesome {
Task MakeAwesomeAsync();
}
Em algumas implementações, obtém benefícios impressionantes ao ser feito de forma assíncrona usandoasync
eawait
. Isso é realmente o que a interface está tentando permitir.
Em outros casos, talvez raro, apenas um método síncrono simples é necessário para impressionar. Então, vamos supor que a implementação seja assim:
public class SimplyAwesome : IAmAwesome {
public async Task MakeAwesomeAsync() {
// Some really awesome stuff here...
}
}
Isso funciona, mas o compilador está avisando:
Este método carece de operadores 'aguardam' e será executado de forma síncrona. Considere usar oawait
operador para aguardar chamadas de API sem bloqueio ou 'aguardar TaskEx.Run (...)' para executar um trabalho vinculado à CPU em um encadeamento em segundo plano.
O compilador está realmente sugerindo esta solução:
public class SimplyAwesome : IAmAwesome {
public async Task MakeAwesomeAsync() {
await Task.Run(() => {
// Some really awesome stuff here, but on a BACKGROUND THREAD! WOW!
});
}
}
Minha pergunta é - o que deve determinar quando eu escolho ignorar esse aviso do compilador? Em alguns casos, o trabalho é tão simples que gerar um fio para ele é inegavelmente contraproducente.