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

时间:2014-05-01 06:33:09

标签: c# asynchronous async-await

我有这个方法来提交对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());
            }
        });
    }

2 个答案:

答案 0 :(得分:2)

new Task()无法启动任务,您需要调用task.Start()启动它。 Task.Run返回已经启动的任务,也称为热门任务。

答案 1 :(得分:0)

更改返回新任务以返回Task.Run,​​解决了它