BeforeStore不';在Ravendb4中,异步会话不能工作吗?

BeforeStore不';在Ravendb4中,异步会话不能工作吗?,ravendb,ravendb4,Ravendb,Ravendb4,我一直在将代码迁移到Ravendb4 我注意到Ravendb4中的侦听器自版本3以来发生了变化。在v3中,您使用了IDocumentStoreListener和RegisterListener,但在v4中,您直接在会话实例上订阅BeforeStore事件 但是,myBeforeStore-事件侦听器不会在异步会话上启动(而是在同步会话上启动)。这是故意的,还是我遗漏了什么 我正在使用RavenDB客户端(.NET)和服务器的版本4.0.0-rc-40025 谢谢 以下是重新创建问题的示例控制台应

我一直在将代码迁移到Ravendb4

我注意到Ravendb4中的侦听器自版本3以来发生了变化。在v3中,您使用了
IDocumentStoreListener
RegisterListener
,但在v4中,您直接在会话实例上订阅
BeforeStore
事件

但是,my
BeforeStore
-事件侦听器不会在异步会话上启动(而是在同步会话上启动)。这是故意的,还是我遗漏了什么

我正在使用RavenDB客户端(.NET)和服务器的版本
4.0.0-rc-40025

谢谢

以下是重新创建问题的示例控制台应用程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Raven.Client.Documents;

namespace BeforeStoreAsync
{
    class Program
    {
        static void Main(string[] args)
        {

            IDocumentStore store = new DocumentStore
            {
                Urls = new[] { "http://localhost:8080" },
                Database = "MyDatabase"
            };

            store.OnBeforeStore += (sender, eventArgs) =>
            {
                if (eventArgs.Entity is MyEntity entity)
                    entity.Description = DateTime.UtcNow.ToString();
            };

            store = store.Initialize();

            var syncEntity = StoreEntitySync(store);
            var asyncEntity = StoreEntityAsync(store).Result;

            if (string.IsNullOrWhiteSpace(syncEntity.Description))
                Console.WriteLine($"BeforeStore didn't run for {nameof(syncEntity)}.");

            if (string.IsNullOrWhiteSpace(asyncEntity.Description))
                Console.WriteLine($"BeforeStore didn't run for {nameof(asyncEntity)}.");
        }

        private static MyEntity StoreEntitySync(IDocumentStore store)
        {
            using(var session = store.OpenSession())
            {
                var entity = new MyEntity
                {
                    Name = "Sync session"
                };

                session.Store(entity);
                session.SaveChanges();

                return entity;
            }
        }

        private static async Task<MyEntity> StoreEntityAsync(IDocumentStore store)
        {
            using (var session = store.OpenAsyncSession())
            {
                var entity = new MyEntity
                {
                    Name = "Async session"
                };

                await session.StoreAsync(entity);
                await session.SaveChangesAsync();

                return entity;
            }
        }
    }

    public class MyEntity
    {
        public string Name { get; set; }
        public string Description { get; set; }

        public string Id { get; set; }
    }
}

不,这在所有情况下都被称为。
实际上,实际的调用机制根本不在
存储
中,而是在
SaveChanges
savechangesync

期间调用的,谢谢您的回复!那么肯定还有其他问题。我已经编辑了这个问题,并添加了一个代码示例来重新创建这个问题。你能帮我找到问题吗?谢谢确认这是一个bug,在下一个版本中修复
BeforeStore didn't run for asyncEntity.