Implementar um delegado para o processador de alimentação de alterações

Concluído

Em C#, um delegado é um tipo especial de variável ou membro que faz referência a um método com uma lista de parâmetros específica e um tipo de retorno.

Para o processador de feed de alterações, a biblioteca espera que um delegado do tipo ChangesHandler<> que recebe um tipo genérico represente seus itens individuais serializados. O delegado inclui dois parâmetros; Uma lista somente leitura de alterações e um token de cancelamento.

Você pode criar um método chamado HandleChangesAsync com a mesma assinatura de método que o delegado em uma sintaxe detalhada.

static async Task HandleChangesAsync(
    IReadOnlyCollection<Product> changes,
    CancellationToken cancellationToken
) 
{
    // Do something with the batch of changes
}

Depois que isso for criado, você pode criar uma nova variável do tipo ChangesHandler<> e, em seguida, fazer referência ao método anterior.

ChangesHandler<Product> changeHandlerDelegate = HandleChangesAsync;

Uma sintaxe ainda mais concisa que realiza a mesma coisa usaria uma função anônima em vez de um membro do método nomeado.

ChangesHandler<Product> changeHandlerDelegate = async (
    IReadOnlyCollection<Product> changes,
    CancellationToken cancellationToken
) => {
    // Do something with the batch of changes
};

Dentro do delegado, você pode iterar sobre a lista de alterações e, em seguida, implementar qualquer lógica de negócios que faça sentido para seu aplicativo. Neste exemplo, você pode pensar em cada alteração como um "instantâneo" do item em algum momento que é entregue pelo menos uma vez ao aplicativo cliente host.

Um loop foreach é usado para iterar através do lote atual de alterações e, em seguida, cada item é impresso na janela do console.

ChangesHandler<Product> changeHandlerDelegate = async (
    IReadOnlyCollection<Product> changes,
    CancellationToken cancellationToken
) => {
    foreach(Product product in changes)
    {
        await Console.Out.WriteLineAsync($"Detected Operation:\t[{product.id}]\t{product.name}");
        // Do something with each change
    }
};