【发布时间】:2016-06-21 05:50:24
【问题描述】:
我正在尝试创建一个可以多次调用并稍后等待的异步方法 - 该方法应该进行数据库调用,等待结果,在获得结果后进行一些操作,然后返回最终结果。它看起来像这样:
public async Task<long> GetSomethingFromDbAndSelectSomethingOnServer()
{
//stuff is just an Entity Framework database call
var stuff = await myEfDbContext.StuffTable.ToListAsync();
long itemsCount = stuff.Where(someQueryThatCantGoToDb).Count();
return itemsCount;
}
这似乎是一个明显的错误,因为我将返回类型指定为任务,而实际上我只返回一个 long。这会编译,但会引发异常:
“System.NotSupportedException”类型的第一次机会异常 发生在EntityFramework.dll中
我打算这样使用这段代码:
Task<long> myAsyncCall = GetSomethingFromDbAndSelectSomethingOnServer();
long myCount = await myAsyncCall;
这可能有点无关紧要,但为了详细说明,这里有一些有用的东西:
Task<long> pendingItemCountCall = _mongoItems.Find(filter).CountAsync();
long myCount2 = await pendingItemCountCall;
当然,不同之处在于它只是对 db 的异步调用,没有进一步的操作,我试图在我提出的问题的 SQL 调用中执行此操作。
编辑:
所以,实际上,这似乎是违规行:
var stuff = await myEfDbContext.StuffTable.ToListAsync();
如果我将其注释掉并手动设置 count var,代码就会运行。我很困惑,但我对整个问题更感兴趣——我是否在这里正确使用异步,不一定是我的特定错误的错误。
【问题讨论】:
-
@HenkHolterman:成功了!!
标签: c# entity-framework asynchronous