Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步等待,代码永远不会执行_C#_Asynchronous_Async Await - Fatal编程技术网

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方法永远不会完成。谢谢:)