Ho una classe di base che fornisce un metodo con la seguente firma:Cosa dovrei usare come manichino attendibile?
virtual async Task RunAsync()
classi derivate dovrebbero sostituire questa implementazione con qualcosa di simile
public override async Task RunAsync()
{
await base.RunAsync();
await this.DoSomethingElse();
}
Ora il compilatore mi dà un avvertimento che la Base. RunAsync è privo di un'attesa. Voglio che il mio codice sia privo di avvertimenti, non sopprima gli avvisi e che funzioni senza dover fornire controlli nulli anche se la classe derivata non fornisce un'implementazione di override, quindi non è possibile utilizzare virtual Task RunAsync()
(omettendo la parola chiave async).
Per ora l'implementazione nel metodo base è await Task.Delay(0);
che disattiva l'avviso del compilatore, ma in qualche modo non è "pulito" secondo me. Qual è il modo giusto per affrontare questo argomento?
Task.FromResult è probabilmente quello che stai cercando – Zache
O questo: https://msdn.microsoft.com/it us/library/system.threading.tasks.task.completedtask (v = vs.110) .aspx – Zache
Questa sembra un'implementazione divertente. Perché non utilizzare 'RunAsync' come metodo non virtuale e creare un metodo' Abstract' 'RunAsyncInternal' che' RunAsync' chiamerà con 'await' - questo cancellerà anche il tuo avviso. – rhughes