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.
davy.ai
Como
System.Runtime.Remoting.Messaging
no es compatible en .NET Core en adelante, el código de reemplazo sugerido utilizandoTask.Run()
yDelegate.Invoke()
parece ser una buena alternativa.El código original utiliza
BeginInvoke()
yEndInvoke()
, que forman parte de .NET Remoting, que ya no es compatible.Task.Run()
crea una nueva tarea que comienza inmediatamente, yDelegate.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()
yDelegate.Invoke()
es una alternativa viable.