gpt4 book ai didi

c# - 如何取消 tailable 游标上的 MoveNext 操作

转载 作者:可可西里 更新时间:2023-11-01 10:43:46 26 4
gpt4 key购买 nike

我正在使用 MongoDB 实现 PubSub。如果我创建查询并指定带有 NoCursorTimeout 的 TailableCursor:

using(var enumerator = _Collection.FindAs<BsonDocument>(Query.GTE("CreationTimeUTC", DateTime.UtcNow))
.SetFlags(QueryFlags.AwaitData | QueryFlags.NoCursorTimeout | QueryFlags.TailableCursor)
.SetSortOrder(SortBy.Ascending("$natural")).GetEnumerator))
{
while(true)
{
if(enumerator.MoveNext())
{
//process the message here
}
}
}

MoveNext() 无限期阻塞(或直到数据可用或发生错误)。如果我想强制 MoveNext() 返回(例如,如果我想取消收听)我该怎么做?在枚举器或游标上调用 Dispose()?

最佳答案

如果您没有在光标上设置超时,那么这几乎就是您可以做的所有事情,只要 MoveNext 方法不接受 CancellationToken。只需处理枚举器,捕获 ObjectDisposedException 并继续。

我有一个类似案例的解决方案示例here.在这种情况下是:

try
{
using(enumerator.CreateTimeoutScope(TimeSpan.FromHours(1)))
{
while(true)
{
if(enumerator.MoveNext())
{
//process the message here
}
}
}
}
catch (ObjectDisposedException)
{
}

关于c# - 如何取消 tailable 游标上的 MoveNext 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23572752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com