异步等待,代码永远不会执行
本文关键字:执行 永远 代码 等待 异步 | 更新日期: 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,这就解决了