为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB 中的异步更改流

MongoDB 中的异步更改流

C#
青春有我 2022-08-20 17:18:11
我想在不阻塞线程的情况下侦听集合的更改流。在下面的代码中,ForEachAsync 将永远阻塞,并在更改发生时对其进行处理。using (var cursor = await collection.WatchAsync()){    await cursor.ForEachAsync(change =>    {        // process change event    });}我已尝试删除“await”并将任务存储在变量中,但是在我实际等待或之前不会处理任何更改。稍后等待() 任务。我希望即使我不等待任务,事件仍然会被处理。我该怎么办,这样我的整个程序就不会阻止侦听更改?我正在考虑将功能包装在新线程中,但这真的有必要吗?
查看完整描述

2 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

我没有足够的声誉来评论(还),所以我以答案的形式提供反馈:

在这种情况下,您应该使用事件(侦听器,处理程序),而不是等待/异步。如果没有更多关于你想要完成什么的信息,就很难详细说明这一点。


查看完整回答
反对 回复 2022-08-20
?
繁花如伊

TA贡献2012条经验 获得超12个赞

所以,我发现以下工作...


static void Main(string[] args)

{

    Task watchTask = WatchCollection();


    // Do other stuff here, while watching...

}


private static async Task WatchCollection()

{

    using (var cursor = collection.Watch())

    {

        await cursor.ForEachAsync(change =>

        {

            // process change event

        });

    }

}

当我试图这样做时,这不起作用:


static void Main(string[] args)

{

    using (var cursor = collection.Watch())

    {

        Task watchTask cursor.ForEachAsync(change =>

        {

            // process change event

        });

    }


    // Do other stuff here, while watching

}

因此,实际的 ForEachAsync 任务被等待,而包装整个功能的外部任务则未等待...我要么太累了,要么对任务不够熟悉,无法很好地解释为什么一个有效而另一个不起作用。


查看完整回答
反对 回复 2022-08-20
  • 2 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信