当前位置: 首页 > 编程语言 > C#

如何使实体框架异步执行Share

时间:2023-04-10 18:56:26 C#

如何使实体框架异步执行我的ASP.NetMVC5应用程序中的异步控制器有问题。我正在使用EntityFramework6CodeFirst方法。我有一个方法publicasyncTaskIndex(){using(varcontext=newMyDbContext()){vareventsTask=context.Events.Where(e=>e.Enable).ToListAsync();varcountTask=context.Users。计数异步();awaitTask.WhenAll(eventsTask,countTask);returnView(newViewModel(){Events=eventsTask.Result,Count=countTask.Result});我这里有两个异步方法。我用MiniProfiler分别测量了它们。它们大约需要85毫秒。但在我的方法中,我使用Task.WhenAll()运行它们。我相信它异步执行Db查询并且都需要大约85-90毫秒。但它需要~170-180。所以我有同步运行的异步方法(彼此跟随)。我觉得是背景的原因。当我删除上下文查询并使用HttpClient调用许多api方法时,我进行了测试。它花费的时间等于更长的时间(3个api调用,每个~500ms。完整方法需要~600ms)。我相信可以异步执行EF方法。有谁知道这个的解决方案?这甚至不应该实际工作,而是抛出异常。我想第一个查询在第二个查询开始之前完成。EF6不支持对同一上下文执行多个异步操作。等待每个查询(因此它们不会同时运行),或者为每个查询使用不同的上下文。我发现了问题。原因是MiniProfiler.EF6。1)为了分析我的SQL问题,我使用MiniProfiler.EF6。即使我使用不同的EFDBContext,该框架也可以避免并发sql查询。2)我禁用MiniProfile.EF6并运行我的应用程序。我对ken2k提到的内容有一个例外。为了避免这个异常,我遵循了这个答案EF6doesnotsupportmultipleasyncoperationsinthesamecontext。3)我测量Dapper和并发SQL查询。我在测试中使用单个SQLConnection进行异步查询。我得到的结果是:a)如果我对Dapper使用SqlConnection,查询将异步执行(并行)b)如果我使用ProfiledDbConnectionMiniProfiler,则Dapper将执行查询(非并行)以上是C#学习教程:Howtomakeentityframeworkexecuteasynchronously分享如果对你有用,需要详细了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: