异步等待,代码永远不会执行

本文关键字:执行 永远 代码 等待 异步 | 更新日期: 2023-09-27 18:00:58

Im使用此方法提交对eventstore的更改,然后在eventstore更新后发布事件
我的问题是,代码永远不会到达aggregate.MarkChangesAsCommitted方法和下一个await

    public async Task CommitChanges()
    {
        foreach (var aggregate in _trackedAggregates.Values)
        {
            var newEvents = aggregate.GetChanges();
            await _eventStorage.Save(aggregate.Id, newEvents);
            aggregate.MarkChangesAsCommitted();
            await _eventPublisher.Publish(newEvents);
        }
    }

事件存储

    public Task Save(Guid aId, IEnumerable<IDomainEvent> events)
    {
        return new Task(() =>
        {
            using (var stream = _store.OpenStream(aId))
            {
                foreach (var domainEvent in events)
                {
                    stream.Add(new EventMessage
                    {
                        Body = domainEvent
                    });
                }
                stream.CommitChanges(Guid.NewGuid());
            }
        });
    }

异步等待,代码永远不会执行

new Task()不启动任务,您需要调用task.Start()来启动它。Task.Run返回一个已启动的任务,也称为热任务。

将return new Task更改为return Task.Run,这就解决了