変更フィード プロセッサのデリゲートを実装する

完了

C# では、デリゲートは、特定のパラメーター リストおよび戻り値の型を使用してメソッドを参照する変数またはメンバーの特殊な型です。

変更フィード プロセッサでは、ライブラリに、シリアル化された個々の項目を表すためにジェネリック型を使用する ChangesHandler<> 型のデリゲートが必要です。 デリゲートには、次の 2 つのパラメーターが含まれています: 変更の読み取り専用リストとキャンセル トークンです。

冗語構文では、デリゲートと同じメソッド シグネチャを使用して、HandleChangesAsync という名前のメソッドを作成できます。

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

作成されたら、型 ChangesHandler<> の新しい変数を作成して、前のメソッドを参照できます。

ChangesHandler<Product> changeHandlerDelegate = HandleChangesAsync;

同じことを達成するさらに簡潔な構文でも、名前付きメソッド メンバーではなく、匿名関数が使用されます。

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

デリゲート内では、変更の一覧を反復処理して、アプリケーションにとって理にかなうビジネス ロジックを実装できます。 この例では、各変更を、ホスト クライアント アプリケーションに少なくとも 1 回配信される、ある時点での項目の "スナップショット" と考えることができます。

foreach ループは、変更の現在のバッチを反復処理するために使用され、次に、各項目がコンソール ウィンドウに出力されます。

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