Se me permite um adendo,
Sempre que você utiliza Action e Func você está usando um delegate, ambas as classes são abstrações do delegate para tornar o seu uso mais fácil e simples.
Action => quando você não precisa de algum valor de retorno.
Func => quando você precisa de algum retorno.
Das vezes em que vi/fiz uso de delegate foram em WPF apps, quando você depende de alguma ação para fazer outra. Ex: usuário acompanhando a % de processamento de alguma coisa, um delegate pode ser usado para ir atualizando a tela.
Recomendo a leitura do capitulo sobre delegates/actions/funcs do livro C# In a nutshell.