异步方法,包括对结果的异步调用和同步操作
我正在尝试创建一个异步方法,我可以多次调用并等待以后 – 该方法应该进行数据库调用,等待结果,一旦有结果就做一些操作,然后返回最终结果。 它看起来像这样:
public async Task GetSomethingFromDbAndSelectSomethingOnServer() { //stuff is just an Entity Framework database call var stuff = await myEfDbContext.StuffTable.ToListAsync(); long itemsCount = stuff.Where(someQueryThatCantGoToDb).Count(); return itemsCount; }
这似乎是一个明显的错误,因为我将返回类型指定为Task,而实际上我只返回了很长时间。 这会编译,但抛出exception:
EntityFramework.dll中发生了’System.NotSupportedException’类型的第一次机会exception
我打算像这样使用这个代码:
Task myAsyncCall = GetSomethingFromDbAndSelectSomethingOnServer(); long myCount = await myAsyncCall;
这可能有点无关紧要,但是为了详细说明,这里有一些好处:
Task pendingItemCountCall = _mongoItems.Find(filter).CountAsync(); long myCount2 = await pendingItemCountCall;
当然,区别在于它只是对db的异步调用,没有进一步的操作,我正在尝试在SQL调用中执行此问题。
编辑:
所以,实际上,这似乎是违规行:
var stuff = await myEfDbContext.StuffTable.ToListAsync();
如果我对此进行注释并手动设置计数var,那么代码就会出现。 我很困惑,但我对整体问题更感兴趣 – 我是否在这里正确使用异步,不一定是我的特定错误的错误。
您无法在同一上下文中等待多个查询。 您必须为每个操作使用自己的上下文:
上述就是C#学习教程:异步方法,包括对结果的异步调用和同步操作分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public async Task GetSomethingFromDbAndSelectSomethingOnServer() { using(var context = new MyEfDbContext()) { // include the following if you do not need lazy loading and want some more speed context.Configuration.AutoDetectChangesEnabled = false; context.Configuration.ProxyCreationEnabled = false; var stuff = await myEfDbContext.StuffTable.ToListAsync(); long itemsCount = stuff.Where(someQueryThatCantGoToDb).Count(); return itemsCount; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1013381.html