Ciao Moreno,
grazie per le indicazioni
Ha senso usare interlocked solo nella condizione del while, dato che viene valutata su un thread separato. Lo Skip non ne ha bisogno perché si trova sullo stesso thread che scrive il valore.
while (addresses.Count > Interlocked.CompareExchange(ref skipCount, int.MinValue, int.MinValue))
{
//...
}
mi ero fissato sul metodo Interlocked.Read e non ho pensato all'utilizzo di CompareExchange con int.MinValue int.MaxValue, più andavo avanti e più vedevo la soluzione che ho proposto inizialmente come una forzatura...da qui ho riscritto tutto con la classe AutoResetEvent.
Il materiale che mi hai segnalato è stato utile ed in aggiunta ho dato una letta a questo articolo
.NET Interlocked Operations@pietro09
Nel codice che hai postato ho notato l'utilizzo di Console.WriteLine() ma sopratutto Console.ReadKey()
Attenzione. Se la tua console application gira nello scheduler di windows, i WriteLine sono superflui ed il ReadKey
non fa terminare l'applicazione.
Hai due soluzioni e dipendono dalle tue esigenze
1) Se il tuo applicativo deve girare solo nello scheduler e non c'è iterazione con un utente, ma torna utile in fase di sviluppo avere indicazioni, racchiudi i WriteLine e ReadKey in blocchi di compilazione condizionale. Quando sviluppi compili in configurazione "Debug" quando rilasci in "Release"
#If...Then...#Else Directives
#If DEBUG Then
Console.Write("Premere un tasto per continuare . . . ")
Console.ReadKey()
#End If
2) Altrimenti, una soluzione sicuramente più funzionale è gestire gli argomenti da riga di comando.
Main() and command-line arguments
private static void Main(string[] args)
{
bool quite = args.Length > 0 && args.First() == "q";
// altro codice...
if (!quite)
{
Console.WriteLine("Premere un tasto per continuare ...");
Console.ReadKey();
}
}
In questo esempio se richiami da CommandPrompt il tuo applicativo e passi "q" come parametro termina l'esecuzione senza aspettare iterazione da parte dell'utente. es. C:\MioProgetto\MiaApplicazione.exe q
(ma che mi ha fatto vergognare del mio!)
Mai vergognarsi...non si smette mai di imparare :-)
Ciao
Alessio
Modificato da scioCoder il 06 febbraio 2019 12:20 -