Non ero sicuro se qui o SO fosse il posto giusto per chiederlo, ma qui va comunque.
Quindi voglio migliorare un sistema che è attualmente in esecuzione. Ha servizi e molte app autonome, ma nessuna di queste cose è adeguatamente coordinata. Ora voglio creare una mini app per dimostrare i miglioramenti del sistema se dovessimo costruire queste cose in un nuovo "framework", se lo farai.
L'idea è di creare un'applicazione dashboard che gestisca e generi report su un servizio in background. Il servizio verrà eseguito diciamo ogni 3 minuti e questo a sua volta chiamerà una classe (FileProcessor i.e.) che a sua volta chiama ciascun tipo di metodo Run del processore. Questo metodo Run sarà una chiamata per avviare un thread di una classe Runnable. Voglio quindi utilizzare questa classe runnable per conservare le proprietà del file che sta / stava elaborando, se esiste un errore - la causa, un'opzione per rieseguire il metodo, il suo stato corrente (cioè a che punto è in elaborazione).
Questi "runnables" a volte saranno un'interazione diretta con un file in una directory, o sarebbe un record nel database che richiede l'elaborazione di un file.
Ora avendo uno sfondo, vorrei chiedere quanto segue:
Immagina che l'interazione diretta con i file in una directory (ovvero la modifica di un'estensione) avvenga immediatamente in una "modalità batch" dove diciamo cinque file trovati in C:\Program Files\My App\Files\*.xyz
e questo processo (direttamente dopo una ricerca nella directory ) rinomina tutti questi file in C:\Program Files\My App\Files\*.zyx
uno alla volta, diciamo con il seguente:
foreach (FileInfo fi in di.GetFiles("*.xyz", TopDirectoryOnly))
{
fi.MoveTo(Path.ChangeDirectory(fi.FullName, ".zyx"));
}
In modo opposto, i record recuperati dal database verranno assegnati a una thread separata per l'elaborazione, diciamo 10 processi di elaborazione dei file, verranno lanciati 10 thread di questo tipo Runnable, ognuno contenente informazioni sullo stato, ecc. Questi thread saranno aggiunto a un elenco per tenere traccia di questi processi per poter passare queste informazioni all'applicazione.
La ridenominazione dei file è semplice e veloce e quindi credo di metterla in una singola "chiamata di metodo", mentre i file che richiedono l'elaborazione possono essere compresi tra 20 e 700 righe in cui i valori vengono tracciati dalla linea e inseriti in un database MySQL. Per questo motivo voglio consentire a tutti i file di "avviarsi allo stesso tempo" in modo che diciamo che uno o due file di linea non blocchino / ritardino gli altri venti 15 file di linea che potrebbero essere stati tutti fatti al momento in un singolo 700 file di linea elaborato.
In sostanza vorrei sapere se qualcuno con più conoscenza ed esperienza di me può dire se questa è una buona idea o un modo per affrontare la soluzione. Forse mi manca qualcosa o il mio progetto potrebbe essere spento.
P.S. Questo servizio e questa applicazione verranno eseguiti su un server abbastanza efficiente.
Grazie in anticipo per qualsiasi direzione e / o consiglio.