Per aggiungere alla buona risposta di Reed, pensare in questo modo:
Func<int, int> GetFunc()
{
Func<int, int> f = GetFunc(someParameter);
caso dire
return f;
o ragione "Dovrei essere di ritorno a func qui, quindi cerchiamo di fare un lambda che chiama la funzione che ho in mano ":
return (int i) => f(i);
Spero che tu faccia il primo; hai già un Func<int, int>
in mano, quindi basta restituirlo. Non eseguire una funzione che richiama una funzione.
Se trovassi
IEnumerable<int> GetSequence()
{
IEnumerable<int> sequence = GetSequence(someParameter);
diresti
return sequence;
o
foreach(int item in sequence) yield return item;
? Ancora una volta, spero che tu faccia il primo. Hai una sequenza in mano, quindi perché passare a tutta la fatica di fare una nuova sequenza che enumeri quella vecchia?
Lo stesso vale per le attività; proprio come è possibile creare un delegato che avvolge un altro delegato e una sequenza che avvolge un'altra sequenza, è possibile creare un'attività che avvolga un'altra attività, ma perché? È solo uno spreco di risorse.
fonte
2013-03-16 15:35:24
Se contrassegno il metodo come asincrono e attendo prima di tornare, appena prima del ritorno posso scrivere un codice di cortocircuito come "if (someCondition) return false" .. Senza la parola chiave async questo non è possibile perché si lamenta tipo di risposta non corrispondente ... Che cosa consiglieresti in questo caso? Usa Task.FromResult ?? O è asincrono attendere avvolgimento bene in questo caso? – labroo
@labroo In questo caso, probabilmente userò "Task.FromResult". – hazzik