1) I heard that when we won’t call EndInvoke() it may lead to memory leak? can you demonstrate it how could this lead to memory leak?
2) When i suppose to call EndInvoke() shall i use the code like following ?
namespace BlockMechanism
{
public delegate int MyDelegate(List<int> someInts);
class MainClass
{
static void Main()
{
List<int> someInts = new List<int> { 1, 2, 3, 4, 5, 6, 7 };
MyDelegate test = FinalResult;
IAsyncResult res=test.BeginInvoke(someInts, null, test);
Console.WriteLine(test.EndInvoke(res));
Console.ReadKey(true);
}
public static int FinalResult(List<int> Mylist)
{
return Mylist.Sum();
}
}
}
While your example is correct there is no benefit from using a different thread because you call
EndInvokeon the main thread which will block until the operation completes and it cannot do other work. It would have been equivalent if you calledInvokeon the delegate or directly theFinalResultmethod itself. UsuallyEndInvokeis called in the callback provided by theBeginInvokemethod:As far as the memory leak is concerned you may take a look at this thread.
P.S: Instance members of the List<T> class are not thread safe so you should be careful when you access them from multiple threads.