none
Ejecutar proceso en otro hilo (VB AspNet WebForms) RRS feed

  • Pregunta

  • Buenas,

    Tengo una Asp:Button con un evento click de servidor que al final de realizar una serie de operaciones necesito que haga un envío masivo de correos pero como esta tarea va a demorar bastante tiempo deseo que se ejecute en otro hilo para que lo correos se vayan enviando sin interrumpir al hilo principal.

    Protected Sub btnConfirmarEnvioInvitaciones_Click(sender As Object, e As EventArgs)
    	Try
    		Invitar()
    		CargarDocentes()
    		rgDocentes.DataBind()
    		upGeneral.Update()
    		
    		EnvioMasivoCorreos()
    	Catch ex As Exception
    		Throw ex
    	End Try
    End Sub
    
    private Sub EnvioMasivoCorreos()
    	' Proceso de larga duración
    End Sub

    Necesito que ese método EnvioMasivoCorreo() se realice en segundo plano, es decir, en otro hilo. Estoy trabajando con Visual Basic.Net en Visual Studio 2013 con Net Framework 4.5

    En  C# con VS2017 solía utilizar Task.Run(), pero no sé cómo puedo hacer lo con VB y con las herramientas que tengo.

    Favor su apoyo, muchas gracias.


    • Editado eduar2083 jueves, 27 de junio de 2019 23:50
    jueves, 27 de junio de 2019 23:49

Respuestas

Todas las respuestas

  • Hola

    intenta con esto

    Dim hilo As New Threading.Thread(AddressOf EnvioMasivoCorreos)

    hilo.Start()

     

    • Propuesto como respuesta Pablo RubioModerator viernes, 28 de junio de 2019 14:31
    • Marcado como respuesta eduar2083 domingo, 30 de junio de 2019 14:10
    viernes, 28 de junio de 2019 1:54
  • Gracias Marti,

    Se me ha presentado un problema. Antes de iniciar el nuevo hilo se tiene una lista en una variable de Sesion y este nuevo hilo debe utilizar esta lista (accediendo a la variable de Sesion), sin embargo el hilo principal la modifica antes de que el hilo secundario pueda procesarla. Es decir algo como esto:

    	' En este punto se tiene la lista con N elementos 
    	Session("ListaPersona") = lista
    
    	Dim hilo As New Threading.Thread(AddressOf EnvioMasivoCorreos)
    	hilo.Start()
    
    	lista.Clear()
    	Session("ListaPersona") = lista
    End Sub
    
    Private Sub EnvioMasivoCorreos()
    	Dim lista = DirectCast(Session("ListaPersona"), List(Of MiEntidad))
    	
    	' Al llegar a este punto, la lista está vacía
    	
    	For Each t in lista
    		' Envio de Correo individual
    	Next
    End Sub

    El bucle del Método EnvioMasivoCorreos() nunca itera dado que la lista se encuentra siempre vacía. Entiendo que se debe a que el hilo principal limpia la lista y esto debe estar sucediendo antes de que el hilo secundario procese dicha lista.

    Cómo le puedo hacer para que el hilo secundario pudiera tener su propia copia de la lista.


    • Editado eduar2083 viernes, 28 de junio de 2019 19:03
    viernes, 28 de junio de 2019 19:02
  • Hola,

    Después de investigar un poco, veo que es posible pasar el parámetro a través de la llamada al método Start

    Dim hilo As New Thread(AddressOf EnvioMasivoEmailsInvitacion)
    hilo.IsBackground = True
    hilo.Start(listaPersonas)

    Y con esto, ya va funcionamiento bien.

    Muchas gracias, saludos.


    • Editado eduar2083 domingo, 30 de junio de 2019 14:10
    domingo, 30 de junio de 2019 14:10