.netstreamevent-sourcingeventstoredbevent-store

Read stream from EventStore without "stream doesn't exist exception"


Application written in .net tries to read event stream. For this goal, EventStoreCleint wrapper was written, under the hood it uses EventStore.Client.Grpc.Streams 23.1.0. The logic is the following:

The problem is in fact, when the application reads the event stream by _client.ReadStreamAsync if there is no stream, the exception will be thrown. Exceptions are expensive from the performance point of view.

How to read stream even is stream version is 0 without exceptions?


Solution

  • If you inspect the StreamState in the result, it will be StreamNotFound

    var res = await conn.ReadStreamAsync(Direction.Forwards, streamName, startPosition, Int64.MaxValue, resolveLinkTos: false, cancellationToken: ct)
    if (res.ReadState == ReadState.StreamNotFound)
       // TODO handle empty
    

    Example in Equinox

    When writing, ConditionalAppendToStreamAsync don't throw an exception either; you inspect the Status of the result.

    Example in Equinox