If you need further explanation please let me know so that i will give you complete details .
Assume you need to create a framework which needs to call an unknown method present in an unknown class . For details better to read
Delegates are useful when you do want to propagate events to other objects without any relationship with them.
When you do not know what is going to happen until run time. Since delegates are of user type, and you do not know what is going to happen at run time the best practice is to return void values. This is what makes them ideal for event handling, if you need more then 1 event handled in the same action, they can be added to the delegate and fired in what ever selectable order.Also delegates can make calls to methods from other classes you do not wish to interface all the methods of. So you can select what methods are accessible.
Delegates can be used in following cases:-1) When you want to pass the methods as a parameter2) most important usage of delegate is event handling. Event Handlers are nothing but methods being pointed by delegates and called.3) It can also be used in Callbacks4) Asynchronous processing
if i am not wrong then if you have a multiple process to do in parallel then use delegate