如何在tailable游标上取消MoveNext操作

时间:2014-05-09 19:46:13

标签: c# .net mongodb mongodb-.net-driver

我正在使用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()?

1 个答案:

答案 0 :(得分:1)

如果您没有在光标上设置超时,那么只要MoveNext方法不接受{{1},您就可以做到这一切。 }。 只需处置枚举器,抓住CancellationToken继续前进。

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

ObjectDisposedException