40 messaggi dal 28 maggio 2009
Ciao, una domanda. se io ho un codice di questo tipo:

    Protected Sub form1_Init(sender As Object, e As EventArgs) Handles form1.Init

        Application.Lock()

        Response.Write("ciao")
        Response.Flush()

        System.Threading.Thread.Sleep(5000)

        Response.Write(" simone")
        Response.Flush()

        Application.UnLock()

    End Sub

 


ho verificato che due utenti che richiedo la pagina contemporaneamente non eseguono il codice insieme in quanto c'è application.lock().

Mi sfugge una cosa: ma HttpApplicationState.Lock non riguarda solo per le variabili Application? Perchè con questo codice l'utente ha l'accesso esclusivo fino al suo termine?

grazie
Modificato da simonepenna il 14 gennaio 2014 15.48 -

Dio non gioca a dadi con l'universo...tutto ha una logica!
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
quando usi il Lock, il thread in esecuzione rivendica l'accesso esclusivo su quella risorsa, che nel caso particolare è l'oggetto Application.

L'istruzione Application.Lock, dunque, è bloccante per il thread corrente perché, se non riesce subito ad ottenere l'accesso esclusivo alla risorsa, dovrà mettersi in attesa che un thread precedente rilasci il possesso dell'oggetto. Non solo, magari il thread corrente non era stato il solo a chiedere l'accesso esclusivo, e quindi deve attendere che arrivi il suo turno.
Comprendi che questo è un collo di bottiglia, che inizia a notarsi se la tua applicazione ha molti utenti contemporanei o se passa molto tempo prima che la risorsa venga rilasciata.

Mentre questa sincronizzazione avviene, il thread corrente resta bloccato e tutte le successive righe di codice non potranno essere eseguite. Non ha importanza se tu poi, di fatto, non usi l'oggetto Application ma ti limiti a scrivere nella Response. Il flusso di esecuzione si arresta su Application.Lock() finché la contesa sulla risorsa non si risolve.

ciao,
Moreno
Modificato da BrightSoul il 18 gennaio 2014 15.37 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.