È peggio di inutile, mentre stai facendo girare una discussione per non fare nulla e poi aspettare fino a quando non ha finito di fare nulla.
Il modo più semplice per non fare nulla è non fare nulla. In un metodo async
il metodo sarà ancora sono tornati un Task
, ma che Task
sarà completato già, in modo da qualcosa await
ing che più in alto si arriva direttamente sulla prossima cosa che deve fare:
public async virtual Task Save(String path)
{
if (NewWords.Any())
{
await FileManager.WriteDictionary(path, NewWords, true);
}
}
(Inoltre, sarebbe più in linea con la convenzione se SaveAsync
e WriteDictionaryAsync
fossero i nomi dei metodi qui). Se non si utilizza async
(e non c'è bisogno di qui, ma capisco che è un esempio) utilizzare Task.CompletedTask
:
public virtual Task Save(String path)
{
if (NewWords.Any())
{
return FileManager.WriteDictionary(path, NewWords, true);
}
return Task.CompletedTask;
}
Se si esegue la codifica a fronte di un quadro prima di 4.6 e, pertanto, non hanno CompletedTask
disponibile, Task.Delay(0)
è utile come Delay
casi particolari il valore 0
per restituire un'attività completata cache (in realtà, la stessa che CompletedTask
rendimenti):
public virtual Task Save(String path)
{
if (NewWords.Any())
{
return FileManager.WriteDictionary(path, NewWords, true);
}
return Task.Delay(0);
}
Ma il modo 4.6 è più chiaro come i vostri inten t, piuttosto che dipendere da un capriccio di implementazione.
fonte
2016-04-08 12:24:36
Dicci perché hai inserito quel codice. Non è necessario ed è la prova che devi fraintendere qualcosa. Hai bisogno di scoprire di cosa si tratta. – usr
Non è necessario ed è anche dannoso. – IllidanS4
NON UTILIZZARE 'Task.Run' IN ATTUAZIONE! http://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html – Aron