MongoDB 中的异步更改流

我想在不阻塞线程的情况下侦听集合的更改流。


在下面的代码中,ForEachAsync 将永远阻塞,并在更改发生时对其进行处理。


using (var cursor = await collection.WatchAsync())

{

    await cursor.ForEachAsync(change =>

    {

        // process change event

    });

}

我已尝试删除“await”并将任务存储在变量中,但是在我实际等待或之前不会处理任何更改。稍后等待() 任务。


我希望即使我不等待任务,事件仍然会被处理。


我该怎么办,这样我的整个程序就不会阻止侦听更改?我正在考虑将功能包装在新线程中,但这真的有必要吗?


青春有我
浏览 76回答 2
2回答

慕运维8079593

我没有足够的声誉来评论(还),所以我以答案的形式提供反馈:在这种情况下,您应该使用事件(侦听器,处理程序),而不是等待/异步。如果没有更多关于你想要完成什么的信息,就很难详细说明这一点。

繁花如伊

所以,我发现以下工作...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 任务被等待,而包装整个功能的外部任务则未等待...我要么太累了,要么对任务不够熟悉,无法很好地解释为什么一个有效而另一个不起作用。
打开App,查看更多内容
随时随地看视频慕课网APP