Implementieren eines Delegaten für den Änderungsfeedprozessor

Abgeschlossen

In C# ist ein Delegat ein spezieller Typ von Variable oder Member, der auf eine Methode mit einer bestimmten Parameterliste und einem bestimmten Rückgabetyp verweist.

Für den Änderungsfeedprozessor erwartet die Bibliothek einen Delegaten vom Typ ChangesHandler<>, der einen generischen Typ annimmt, um Ihre serialisierten einzelnen Elemente darzustellen. Der Delegat enthält zwei Parameter: eine schreibgeschützte Liste von Änderungen und ein Abbruchtoken.

Sie können eine Methode mit dem Namen HandleChangesAsync mit derselben Methodensignatur wie der Delegat in einer ausführlichen Syntax erstellen.

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

Nachdem diese erstellt wurde, können Sie eine neue Variable vom Typ ChangesHandler <>erstellen und dann auf die Methode oben verweisen.

ChangesHandler<Product> changeHandlerDelegate = HandleChangesAsync;

Eine noch präzisere Syntax, die dasselbe erreicht, würde eine anonyme Funktion anstelle eines benannten Methodenmembers verwenden.

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

Innerhalb des Delegaten können Sie durch die Liste der Änderungen iterieren und dann beliebige Geschäftslogik implementieren, die für Ihre Anwendung sinnvoll ist. In diesem Beispiel können Sie sich jede Änderung als „Momentaufnahme“ des Elements zu einem bestimmten Zeitpunkt vorstellen, die mindestens ein Mal an die Hostclientanwendung übermittelt wird.

Eine Foreach-Schleife wird verwendet, um den aktuellen Änderungsbatch zu durchlaufen. Anschließend wird jedes Element an das Konsolenfenster ausgegeben.

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
    }
};