【发布时间】:2018-11-29 15:37:07
【问题描述】:
我正在开发 .NET Core 中的 WebAPI,为了访问数据库,我有一个同步存储库模式实现。现在我正在将方法从同步更改为异步,并且遇到了一些我不明白的问题。
我有这个功能:
public List<object> Save(List<T> entities)
{
return entities.Select(x => _session.Save(x)).ToList();
}
如何使其异步?
第二个功能:
public async Task<List<Comment>> GetCommentsForPost(long postId)
{
try
{
return await (List<Comment>)_session.QueryOver<Comment>()
.Where(x => x.PostId.Id == postId && !x.Deleted)
.OrderBy(x => x.Created).Desc
.ListAsync().Result;
}
catch (Exception e)
{
logger.Error(e.Message + e.InnerException + e.StackTrace);
return null;
}
}
这两个功能不相关。我把它们放了,这样我就可以显示我有问题的地方。 如您所见,我正在尝试使其在第二个功能中起作用。我面临的所有问题都产生相同的错误:“...不包含 GetAwaiter() 的定义,并且没有可访问的扩展方法 GetAwaiter() 接受...”
有人可以告诉我这应该如何正确完成吗?
编辑: 这是我发现的有效方法:
var t = entities.Select(async x => await _session.SaveAsync(x)).ToList();
await Task.WhenAll(t);
return t;
但是我不确定这是否是一个好方法?
【问题讨论】:
-
不相关,但不要这样做:
logger.Error(e.Message + e.InnerException + e.StackTrace);这样做:logger.Error(e.ToString()); -
好的,谢谢你,这是无关的,但猜它很有帮助:) 太好了,谢谢
标签: c# asynchronous fluent-nhibernate repository-pattern