C# 异步等待,代码永远不会执行
我使用此方法将更改提交到C# 异步等待,代码永远不会执行,c#,asynchronous,async-await,C#,Asynchronous,Async Await,我使用此方法将更改提交到eventstore,然后在eventstore更新后发布事件。 我的问题是代码从未到达聚合.markchangesasscommitted方法,而下一个方法将等待 public async Task CommitChanges() { foreach (var aggregate in _trackedAggregates.Values) { var newEvents = aggregate.Ge
eventstore
,然后在eventstore
更新后发布事件。我的问题是代码从未到达聚合.markchangesasscommitted方法,而下一个
方法将等待
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());
}
});
}
公共任务保存(Guid辅助,IEnumerable事件)
{
返回新任务(()=>
{
使用(var stream=_store.OpenStream(aId))
{
foreach(事件中的var domainEvent)
{
添加(新事件消息)
{
Body=域事件
});
}
stream.CommitChanges(Guid.NewGuid());
}
});
}
将return new Task更改为return Task.Run,解决了此问题new Task()
如果不启动此任务,则需要调用Task.start()
来启动它<代码>任务。运行返回已启动的任务,也称为热任务。是否等待提交更改?然后,\u eventStorage.Save
返回的可等待任务将永远不会完成。考虑到我们不知道\u eventStorage
是什么类型,也不知道Save
方法是什么,这个问题真的不足以让我们冒险猜测答案。我认为你的观点是正确的,似乎Save方法永远不会完成。谢谢:)