Capisco che una delle cause principali per l'indice al di fuori dell'errore di limiti per un oggetto Dizionario è collisione di thread. (Leggendo e scrivendo allo stesso dizionario allo stesso tempo) Tuttavia, mi sono imbattuto in un caso di perplessità in cui la collisione tra thread non è una spiegazione sufficiente.Le cause alternative per Index erano al di fuori dei limiti dell'array nel dizionario .Net
Ecco la situazione: Ho scritto codice che implementa il dizionario in un modo non sicuro per l'elaborazione multi-thread.
Il codice è stato implementato come servizio Web su due server, Server A e Server B. È possibile accedere ai server tramite un servizio di bilanciamento del carico che invierà le richieste ai server A e B in modalità round robin.
Ora ecco la parte difficile. L'errore viene visualizzato SOLO sul server A e mai sul server B. Secondo il nostro team hardware, entrambi i server sono identici. Sebbene la collisione tra thread sia intrinsecamente un processo casuale, dovrebbe comunque influenzare allo stesso modo entrambi i miei server. Vedo più di 50 istanze dell'errore su un server e 0 su un altro. È statisticamente improbabile che le collisioni tra thread avvengano solo su uno dei miei server mentre l'altra è in esecuzione senza errori.
Sto già modificando l'applicazione per renderlo thread più sicuro, ma quali altri motivi possono esistere per questo errore da generare durante l'operazione di inserimento di un oggetto Dictionary?
Sei sicuro che il bilanciamento del carico invia richieste al Server B? Forse riguarda solo il primo server. –
Forse un server ha un sistema operativo a 32 bit e l'altro a 64 bit? –
@ petro.sidlovskyy Ho confermato che entrambi i server hanno traffico basato su file di registro – Joshua