.net中编写的应用程序try 读取事件流.为实现这一目标,编写了EventStoreCleint包装器,在其底层使用EventStore.Client.Grpc.Streams 23.1.0.其逻辑如下:

  • try 读取流
  • 如果没有流(或流版本为0),我们可以继续并发送TenantCreated事件
  • 如果存在流(或流版本为&>0),应用程序将不会应用TenantCreated事件.

事实上,如果没有流,当应用程序以_client.ReadStreamAsync%的速度读取事件流时,将抛出异常.从性能Angular 来看,异常代价很高.

如何读取流,即使流版本为0也没有异常?

推荐答案

如果你判断结果中的StreamState,它将是StreamNotFound

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

Example in Equinox

在编写代码时,ConditionalAppendToStreamAsync也不会抛出异常;您可以判断结果的Status.

Example in Equinox

.net相关问答推荐

.NET最小API BadRequest响应不返回正文

当数据大量分布在微服务中时,我应该如何设计后端?

Dotnet 反射:使用 F# 中的out参数调用 MethodInfo 上的调用

CustomControl 计算自己的宽度和高度 - 使用 bounds.Height=0 调用 ArrangeOverride

无法使用 int.Parse 从字符串转换值

如何在 EF 代码优先中禁用链接表的级联删除?

为什么 .NET 中没有可序列化 XML 的字典?

编译错误:显式实现接口时修饰符 'public' 对此项目无效

获取当前方法的名称

调用委托与方法的性能

大型 WCF Web 服务请求因 (400) HTTP 错误请求而失败

如何从字符串中删除所有字母字符?

如何让 .NET 的 Path.Combine 将正斜杠转换为反斜杠?

NuGetPackageImportStamp 有什么用?

X509Certificate 构造函数异常

Visual Studio 2017 和 2019 突出显示滚动条中所选单词的出现

判断 .NET 中的目录和文件写入权限

如何从 HashSet 中检索实际项目?

我可以将构造函数参数传递给 Unity 的 Resolve() 方法吗?

为什么 IList 不支持 AddRange