Table of Contents

Delegate AsyncEventHandler<TEventArgs>

Namespace
Savvyio
Assembly
Savvyio.Core.dll

Represents the method that will handle an event when the event provides data asynchronously.

public delegate Task AsyncEventHandler<in TEventArgs>(object sender, TEventArgs e) where TEventArgs : EventArgs

Parameters

sender object

The source of the event.

e TEventArgs

An object that contains the event data.

Returns

Task

A task that represents the asynchronous operation.

Type Parameters

TEventArgs

The type of the event data generated by the event.

Examples

This example shows how to subscribe an asynchronous event handler that enriches event data before the publisher continues.

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Savvyio;

namespace ExampleApp;

public sealed class OrderMessagePump
{
    public event AsyncEventHandler<OrderMessageReceivedEventArgs>? MessageReceived;

    public Task PublishAsync(string orderId) => MessageReceived?.Invoke(this, new OrderMessageReceivedEventArgs(orderId)) ?? Task.CompletedTask;
}

public sealed class OrderMessageReceivedEventArgs : EventArgs
{
    public OrderMessageReceivedEventArgs(string orderId)
    {
        OrderId = orderId;
        Metadata = new Dictionary<string, object>();
    }

    public string OrderId { get; }

    public IDictionary<string, object> Metadata { get; }
}

public sealed class AsyncEventHandlerExample
{
    public async Task<IDictionary<string, object>> CaptureAsync()
    {
        var pump = new OrderMessagePump();
        IDictionary<string, object>? snapshot = null;
        pump.MessageReceived += async (_, args) =>
        {
            args.Metadata["orderId"] = args.OrderId;
            args.Metadata["processedAtUtc"] = DateTime.UtcNow;
            snapshot = args.Metadata;
            await Task.CompletedTask;
        };
        await pump.PublishAsync("ORD-42").ConfigureAwait(false);
        return snapshot ?? new Dictionary<string, object>();
    }
}