ciao Paolo,
PaoloMontero ha scritto:
Come viene gestita in asp la premuta contemporanea di un pulsante da più utenti
IIS riceve due richieste e le elabora contemporaneamente con due thread differenti. Dunque può succedere che le tue Sub Button1_Click vadano in esecuzione nello stesso momento.
Questo è un comportamento corretto perché IIS può (e deve) servire le richieste contemporanee di più utenti.
Esiste comunque un limite impostato via configurazione ai thread che IIS può gestire contemporaneamente.
PaoloMontero ha scritto:
c'é il rischio se si hanno delle variabili globali che vengano sovrascritte mentre gli altri utenti modificano pure
Sì, se il tuo codice per esempio va a scrivere su una variabile statica può succedere un disastro. E' possibile che un thread legga quella variabile mentre un altro thread non ha ancora finito a reimpostarla, dando luogo a risultati imprevedibili. Dunque devi proteggerti da questo primo problema di corruzione dei dati usando il SyncLock, oppure una classe come il
ReaderWriterLockSlim che distingua tra lock in lettura e in scrittura, ottimizzando così l'accesso alla risorsa. In alternativa puoi ricorrere ad una delle classi thread-safe del namespace
System.Collections.Concurrent.
Tu che tipo di variabile globale hai?
Risolto questo problema, se ne pone un altro di più alto livello. Nel frangente che trascorre da quando il form viene presentato all'utente a quando il bottone viene cliccato, possono essersi verificati altri salvataggi da parte di altri utenti. Le informazioni visualizzate nel form potrebbero quindi non essere più rilevanti e perciò l'applicazione non dovrebbe più accettare salvataggi provenienti da una pagina con dati vecchi.
Questo è un problema di
concorrenza che si può risolvere in varie maniere, definite
pessimistiche o
ottimistiche.
Qui trovi un articolo che parla di concorrenza in relazione ad un database, ma puoi comunque trarci delle informazioni utili.
http://technet.microsoft.com/it-it/library/ms189130(v=sql.105).aspxDescrivi nel dettaglio cosa contengono le tue variabili globali e che ruolo hanno all'interno della tua applicazione.
ciao,
Moreno