Beh, dipende da come hai programmato la tua applicazione. Siamo in grado di visualizzare un paio di insidie, che puoi trovare sulla tua strada.
insidie
Il primo problema può verificarsi nel database. L'applicazione accede al database, recupera i dati da varie tabelle e quindi avvia l'elaborazione dei dati. Ma improvvisamente l'applicazione si ferma. Alcuni dati sembrano essere incoerenti. Cosa è successo qui?
Quello che è successo è che hai caricato i tuoi dati da varie tabelle senza utilizzare le transazioni. Il database non è in grado di fornire la coerenza di lettura e qualcun altro ha aggiornato una delle tabelle.
Quindi esegui le query critiche in un'unica transazione, in modo che il tuo database possa fornire la coerenza di cui hai bisogno.
Il secondo problema si verifica a livello di file system. Mentre salvi, salva il tuo file xml, un'altra istanza del programma sta scrivendo allo stesso tempo. Questo corromperà il file, perché due scrittori possono fare abbastanza casino.
Anche se il tuo caso d'uso non punta a questa situazione, vale comunque la pena di essere protetto.
Questo è facilmente risolvibile usando il blocco dei file. Un blocco di scrittura esclusivo salverà questo per te. Nessuno può leggere il file e solo tu puoi scriverlo. O devi aspettare sull'altro programma.
L'ultima cosa che puoi fare è creare un file pid (file id processo) per il tuo programma, ma non penso che sia necessario qui.
Quindi, se si esegue un'istanza diversa, è possibile verificare che un'altra istanza sia in esecuzione e quindi passa in una modalità di attesa finché il file PID non viene reso disponibile. Puoi bloccare il file pid come sopra, ma poi con un blocco condiviso. Se il programma si blocca, puoi ucciderlo facilmente leggendo il file pid e uccidere il processo.
In pseudocode fai questo:
if(lock_file(pidfile)){
write_process_id(pidfile)
run_program()
unlock_file(pidfile)
}
Log4net
Come accennato qui, log4net non può eseguire scritture concorrenti su un singolo file di registro:
log4net-can-2-applications-write -to-the-same-log-file di