Best example of delegate is "Progress bar". One of the great functionality delegates provide is to make asynchronous calls using beinginvoke and endinvoke methods.

Another good example is IO processing. For example if you have a heavy IO process that takes some time to finish the execution than you can trigger delegate to do this processing in the back ground meanwhile you can perform other tasks.

As you can see internally events are defined by delegates however this question has been asked many times in interview and often developers get confused. Even though there is no theoretical difference between the two, you should note these points.

Events can be included in Interfaces

You can only invoke event from its own class unlike delegates

Delegates has ability to be called for asynchronous operations using their internal mechanism i.e. beginInvoke and endInvoke