Нужно ли всегда вызывать EndInvoke Делегата внутри AsyncCallback?
Я прочиталИспользуйте AsyncCallbackесть этот фрагмент кода:
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);
}
}
Обратите внимание, что вDoSomething2
, который являетсяAsyncCallback
, делегат явно убит командой.EndInvoke
Это действительно необходимо? Так какAsyncCallback
победил'Вызывается, если и до тех пор, пока не завершится выполнение метода делегата.