Voglio creare all'interno di una funzione una funzione lambda denominata, in modo da poterla richiamare più volte in seguito nella stessa funzione.denominata funzione lambda async
ho usato per fare questo in modo sincrono/senza compiti con
Func<string, bool> pingable = (url) => return pingtest(url);
ma in questo caso voglio chiamare la funzione pingable come un compito, quindi avrei bisogno di un tipo di ritorno Task.
Questo è il punto in cui sono bloccato.
Per tutti al di sotto, che sto ottenendo gli errori di compilazione:
* Func<string, Task<bool>> pingable = (input) => { return pingtest(url); };
* Task<bool> pingable = new Task<bool>((input) => { return pingtest(url); });
posso dichiarare la funzione normalmente, però, ma poi non riesco a chiamare come un compito:
Func<string, bool> pingable = (input) => { return pingtest(url); };
var tasks = new List<Task>();
* tasks.Add(async new Task(ping("google.de")));
Tutte le linee di I contrassegnati con * producono errori di copmile.
http://dotnetcodr.com/2014/01/17/getting-a-return-value-from-a-task-with-c/ sembra avere un suggerimento per una soluzione, ma il campione non consente parametri di input non forniti. (Campione prelevato da lì e semplificato :)
Task<int> task = new Task<int>(obj =>
{
return obj + 1;
}, 300);
Come creare e chiamare lambda Task denominati in C#, e vorrei dichiarare loro su una funzione piuttosto che a livello di classe.
Voglio il nome lambda per chiamarlo più volte (più url in questo caso).
Modifica/aggiornamento dal momento che lei ha chiesto per il codice:
Func<string, Task<bool>> ping = url => Task.Run(() =>
{
try
{
Ping pinger = new Ping();
PingReply reply = pinger.Send(url);
return reply.Status == IPStatus.Success;
}
catch (Exception)
{
return false;
}
});
var tasks = new List<Task>();
tasks.Add(ping("andreas-reiff.de"));
tasks.Add(ping("google.de"));
Task.WaitAll(tasks.ToArray());
bool online = tasks.Select(task => ((Task<bool>)task).Result).Contains(true);
Questo fa già uso della soluzione qui proposta.
come appare "pingtest'? – i3arnon
È qui solo una scorciatoia per ciò che voglio inserire. Lo aggiungerò in una modifica, combinata con la tua soluzione in un minuto. –