En base a lo que me sugirio Leonardo para evitar la concurrencia en una grabacion de registros de stock hice una prueba que mas abajo adjunto. El tema es que me surgio una duda con respecto a los metodos y propiedades estaticas. Lo probe en una aplicacion asp.net, utilize un pattern singleton, pido la instancia de dos hilos distintos y me fijo si no hay concurrencia. El tema es que al cerrar la aplicacion en una maquina y dejarla abierta en otra la coleccion que voy cargando con las llamadas queda viva. Mi pregunta es, ¿Cual es el ciclo de vida de una coleccion que esta declarada como estatica en una clase?.
Muchas gracias Javier ************************************************************************************************************************************************************************************ Partial Class _Default Inherits System.Web.UI.Page Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ss As New Class1 ss.correrHilos(Me.TextBox2.Text) Me.TextBox1.Text = "" For Each cad As String In mymtec.pattern.Singleton.coleccion Me.TextBox1.Text = Me.TextBox1.Text & vbCrLf & cad & " " Next End Sub End Class ************************************************************************************************************************************************************************************ Public Class Class1 Public Sub correrHilos(ByVal dondeEstoy As String) Dim sdd As mymtec.pattern.Singleton = mymtec.pattern.Singleton.GetInstance Dim tr As New System.Threading.Thread(New Threading.ThreadStart(AddressOf sdd.grabar)) tr.Name = dondeEstoy & " ** " & "proceso1" tr.Start() Dim ss As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf sdd.grabar)) ss.Name = dondeEstoy & " ** " & "proceso2" ss.Start() While tr.ThreadState <> Threading.ThreadState.Stopped Or ss.ThreadState <> Threading.ThreadState.Stopped Dim tito As String = "hola" End While End Sub End Class ********************************************************************************************************************************************************************************************************************************* Imports System.Threading Namespace mymtec.pattern Public Class Singleton Public Shared coleccion As New Collection Private Shared _singleton As Singleton Private Shared _mu As New Mutex() Private Sub New() End Sub Public Shared Function GetInstance() As Singleton _mu.WaitOne() Try If _singleton Is Nothing Then _singleton = New Singleton() End If Finally _mu.ReleaseMutex() End Try Return _singleton End Function Public Sub grabar() _mu.WaitOne() coleccion.Add(System.Threading.Thread.CurrentThread.Name & " - 1") Threading.Thread.Sleep(1000) coleccion.Add(System.Threading.Thread.CurrentThread.Name & " - 2") _mu.ReleaseMutex() End Sub End Class End Namespace
