Ciao a tutti. Ho uno strano problema... magari è una scemenza ma non riesco a capirci niente.
Ho un processo che lancia una serie di thread worker in parallelo, che lavorano su dati disgiunti. Dopo che li ha lanciati tutti, fa una join su ciascuno per aspettare che terminino. Fin qui tutto bene. Il problema è che se viene lanciata una eccezione in un thread, il metodo che l'ha lanciata viene richiamato all'infinito, senza che ci sia alcun loop nel mio codice e senza che l'esecuzione passi di nuovo dalla chiamata.
Il codice della execute ècodice://thread principale foreach (var item in myList) { Worker pm = new Worker(item); Thread t = new Thread(pm.Execute); threadList.Add(t); t.Start(); }
Per test nella DoWork ho messo solo una throw Exception(). Per qualche oscura ragione, quella eccezione viene lanciata senza sosta una volta dopo l'altra, senza che il codice passi di nuovo dalla chiamata Business.DoWork(item). Il thread avendo una eccezione, non dovrebbe terminare?codice:public void Execute() { #if DEBUG System.Console.WriteLine(string.Format("worker {0}", item)); #endif // Chiamata a metodo business di una dll Business.DoWork(item); }
Spero davvero che mi sappiate dare qualche suggerimento, ci sto impazzendo. Grazie.

Rispondi quotando

