Buenas, agomes!
Então. Especificamente com delegate não tenho um exemplo real fora as variações que podem ser feitas usando EventHandlers, porém com Func e Action constantemente já tive que usar os callbacks.
Digamos que tu tenhas uma situação onde tu dependa do resultado de uma chamada externa de API para serviços externos.
Nesse nosso cenário hipotético, temos 3 integrações diferentes que fornecem o mesmo serviço que é consumido através da chamada de API, blza?
Numa situação como essa eu dependendo do retorno dessa chamada a API que está integrada para atualizar o banco de dados.
Pegando esse cenário, já tive que implementar callbacks com Action para não ter que replicar o código que salve no meu banco de dados nas 3 chamadas a APIs externas.
void AtualizarBancoDados(int idOperacao, int novoStatus){
// lógica de atualização no banco de dados
}
``` c#
int ChamarAPI_1(int idOperacao, Action<int, int> atualizacaoBancoDadosCallback){
// lógica de chamada para API 1
int resultado = ChamadaHttpExemplo();
atualizacaoBancoDadosCallback(idOperacao, resultado);
}
int ChamarAPI_2(int idOperacao, Action<int, int> atualizacaoBancoDadosCallback){
// lógica de chamada para API 2
int resultado = ChamadaHttpExemplo();
atualizacaoBancoDadosCallback(idOperacao, resultado);
}
int ChamarAPI_3(int idOperacao, Action<int, int> atualizacaoBancoDadosCallback){
// lógica de chamada para API 3
int resultado = ChamadaHttpExemplo();
atualizacaoBancoDadosCallback(idOperacao, resultado);
}
Exemplo de uso do callback:
int idOperacao = 22;
ChamarAPI_2(idOperacao, AtualizarBancoDados);
O ganho que temos é não ter que replicar a lógica de atualização do banco de dados dentro das chamadas HTTP. Só respeitar a assinatura do método.
Obviamente temos várias formas de resolver um problemas, porém acho que sabendo do problema e diferentes formas de resolver, é legal ter essas "cartas na manga".
Vlw. Espero ter respondido satisfatóriamente.