es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AsyncResult en .NET 6.0

Después de investigar un poco, descubrí que Microsoft no proporciona soporte para System.Runtime.Remoting.Messaging a partir de .net core en adelante.

Tengo el siguiente código que utiliza la biblioteca:

<!-- language: lang-vbnet-->
Delegate Sub LogExceptionDelegate(ByVal e As Exception)
Public Sub HandleException(ByVal e As Exception)
   Dim logDelegate As New LogExceptionDelegate(AddressOf LogException)
   logDelegate.BeginInvoke(e, New AsyncCallback(AddressOf LogCallBack), Nothing)
End Sub
Private Sub LogCallBack(ByVal result As IAsyncResult)
   Dim asyncResult As AsyncResult = CType(result, AsyncResult)
   Dim logDelegate As LogExceptionDelegate = CType(asyncResult.AsyncDelegate, LogExceptionDelegate)
   If Not asyncResult.EndInvokeCalled Then
      logDelegate.EndInvoke(result)
   End If
End Sub

¿Podría ser esta una buena alternativa en .net6?

<!-- language: lang-vbnet-->
Delegate Sub LogExceptionDelegate(ByVal e As Exception)
Public Sub HandleException(ByVal e As Exception)
   Dim logDelegate As New LogExceptionDelegate(AddressOf LogException)
   Task.Run(Sub() logDelegate.Invoke(e))
End Sub

Cualquier ayuda es apreciada.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como System.Runtime.Remoting.Messaging no es compatible en .NET Core en adelante, el código de reemplazo sugerido utilizando Task.Run() y Delegate.Invoke() parece ser una buena alternativa.

    El código original utiliza BeginInvoke() y EndInvoke(), que forman parte de .NET Remoting, que ya no es compatible. Task.Run() crea una nueva tarea que comienza inmediatamente, y Delegate.Invoke() se puede utilizar para invocar el método.

    Sin embargo, es importante tener en cuenta que el código de reemplazo tiene algunas diferencias con el código original: el nuevo código no utilizará agrupación de hilos y el patrón BeginInvoke/EndInvoke puede ofrecer un mejor rendimiento en algunos casos.

    En general, si el código original no se puede utilizar debido a la falta de soporte para .NET Remoting, el código de reemplazo sugerido con Task.Run() y Delegate.Invoke() es una alternativa viable.

Comments are closed.