In un servizio Windows di lunga esecuzione ho un gestore di pool di thread personalizzato che ha un ciclo che controlla continuamente un paio di elenchi per i thread inattivi.
Dati molteplici usi dello stesso predicato, c'è qualche vantaggio nel salvare il lambda come Func?
In che modo la raccomandazione potrebbe cambiare in base al numero di thread con cui sta interagendo questo codice o quando è possibile che Func possa essere passato ad altri metodi per facilitare il lavoro?
while (_isRunning )
{
...sleep a bit to prevent thrashing
while ( _threads.Any(t => t.IsIdle) || _autreThreads.Any(t => t.IsIdle)
{
var assignee = _threads.FirstOrDefault(t => t.IsIdle) ?? _autreThreads.FirstOrDefault(t => t.IsIdle);
...give 'em something to do
}
}
Al posto di ciascuno dei lambda potrei usare quanto segue, definito una volta all'esterno per il ciclo, per il riutilizzo.
Func<WorkerThread, bool> isIdleCondition = t => t.IsIdle;