¿Debería uno siempre llamar a EndInvoke un delegado dentro de AsyncCallback?
yo leo elUse AsyncCallback, hay un fragmento de código:
using System;
using System.Threading;
using System.Runtime.Remoting.Messaging;
class MainClass
{
delegate int MyDelegate(string s);
static void Main(string[] args)
{
MyDelegate X = new MyDelegate(DoSomething);
AsyncCallback cb = new AsyncCallback(DoSomething2);
IAsyncResult ar = X.BeginInvoke("Hello", cb, null);
Console.WriteLine("Press any key to continue");
Console.ReadLine();
}
static int DoSomething(string s)
{
Console.WriteLine("doooooooooooooooo");
return 0;
}
static void DoSomething2(IAsyncResult ar)
{
MyDelegate X = (MyDelegate)((AsyncResult)ar).AsyncDelegate;
X.EndInvoke(ar);
}
}
Tenga en cuenta que enDoSomething2
, que es unAsyncCallback
, el delegado es asesinado explícitamente por el comandoEndInvoke
.
¿Es esto realmente necesario? PorqueAsyncCallback
no se llamará a menos que y hasta que el método de delegado termine de ejecutarse.