C#学习教程:UserManagerError–在上一个异步操作完成之前在此上下文中启动了第二个操作,EF6,CastleWindsorIOCContainer,MicrosoftSQLServer2005,使用我的asp.netMVC5web应用程序来解决这个问题错误“System.NotSupportedException:在前一个异步操作完成之前在此上下文中启动了第二个操作。使用'await'确保任何异步操作在调用此上下文中的另一个方法之前完成。不保证对所有实例成员都是线程安全的“我从堆栈跟踪中了解到是“AsyncHelper.RunSync()”导致了问题,我没有在我的代码中使用任何异步函数,而是使用AsyncHelper参考的“FindById”()”-:http://www.symbolsource。组织/MyGet/Meta/aspnetwebstacknightly/Projects/Microsoft.AspNet.Identity.Core/2.0.0-beta1-140129/Issuance/Default/Microsoft.AspNet.Identity.Core/Microsoft.AspNet.Identity.Core/Extensions/UserManagerExtensions。CS?ImageName=Microsoft.AspNet.Identity.Core关于这个身份错误的信息似乎很少,我在应用程序的不同部分使用当前登录用户的详细信息,当我的服务层调用getCurrentLoggedInUser()函数时,这个错误似乎是随机发生的。请帮忙....我的代码和堆栈跟踪-注意:我发现了另一个类似类型的事件:https://aspnetidentity.codeplex.com/workitem/2408在Global.asax中:.Register(Component.For().UsingFactoryMethod((kernel,creationContext)=>newTempoUserManager(newUserStore(newApplicationDbContext(ASPUserDatabaseConnectionString)))).LifestylePerWebRequest()).Register(Component.For().UsingFactoryMethod((kernel,creationContext)=>newRoleManager(newRoleStore(newApplicationDbContext(ASPUserDatabaseConnectionString)))).LifestylePerWebRequest())服务层代码:publicclassGenericService{protectedIRepository_repository;受保护的用户管理器_userManager;公共通用服务(IRepository存储库用户,ManUserManager_pository){存储库;_userManager=用户管理器;}publicApplicationUserGetCurrentLoggedInUser(){//调用此方法时抛出错误return_userManager.FindById(HttpContext.Current.User.Identity.GetUserId());}}下面是堆栈跟踪,System.NotSupportedException:在上一个异步操作完成之前,第二个操作在此上下文中启动。使用“await”确保所有异步操作在调用此上下文的另一个方法之前已完成。不保证任何实例成员都是线程安全的。在System.Data.Entity.Internal.ThrowingMonitor.Enter()在System.Data.Entity.Core.Objects.ObjectQuery`1.d__e.MoveNext()---从抛出异常的先前位置开始的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在System.Data.Entity.Internal.LazyAsyncEnumerator`1.d__0.MoveNext()---从先前抛出异常的位置开始的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Tasktask)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Tasktask)atSystem.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions.d__25`1.MoveNext()---从先前抛出异常的位置开始的堆栈跟踪结束---**atSystem.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在Microsoft.AspNet.Identity.AsyncHelper.RunSync[TResult](Func`1func)在Microsoft.AspNet.Identity.UserManagerExtensions.FindById[TUser,TKey](UserManager`2manager,TKeyuserId)在Tempo.BusinessLogics.Services.GenericService.GetCurrentLoggedInUser()在Tempo.BusinessLogics.Services.GenericService.GetCurrentLoggedInUserID(),BooleantargetSignState)在Tempo.BusinessLogics.Services.TimeService.SignEntries(SignOffssgnOffs,Byteflag)在Tempo.Controllers.TimeEntryController.SignOffAll(StringcbxStatus)**在lambda_method(Closure,ControllerBase,Object[])在System.Web.Mvc.ActionMethodDispatcher.c__DisplayClass1.b__0(ControllerBase控制器,Object[]参数)在System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase控制器,Object[]参数)在System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContextcontrollerContext,IDictionary`2参数)在System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContextcontrollerContext,ActionDescriptoractionDescriptor,IDictionary`2参数)在System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResultasyncResult,ActionInvocationinnerInvokeState)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResultasyncResult)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()在System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResultasyncResult)在System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3f()处(IAsyncResultasyncResult)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResultasyncResult)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()在System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResultasyncResult)在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass21.c__DisplayClass2b.b__1c()在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass21.b__1e(IAsyncResultasyncResult)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResultasyncResult)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()在System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResultasyncResult)在System.Web.Mvc.Controller.b__1d(IAsyncResultasyncResult,ExecuteCoreStateinnerState)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResultasyncResult)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()在System.Web.Mvc.Controller.EndExecuteCore(IAsyncResultasyncResult)在System.Web.Mvc.Controller.b__15(IAsyncResultasyncResult,Controllercontroller)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResultasyncResult)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()在System.Web.Mvc.Controller.EndExecute(IAsyncResultasyncResult)在System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResultasyncResult)在System.Web.Mvc.MvcHandler.b__5(IAsyncResultasyncResult,ProcessRequestState在nerState)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResultasyncResult)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()在System.Web.Mvc.MvcHandler.EndProc(IAsyncResult异步结果)在System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult结果)在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()在System.WebHandler.ExecuteStep(IExecutionStepstep,Boolean&completedSynchronously)也许你忘了等待异步函数,然后下一条语句试图在单个连接上执行两个查询?听起来您正在创建两个上下文,它们都是相同类型的ApplicationDbContext当EF检测到两个调用同时发生在同一上下文中时,您会收到错误消息。您将不得不为每个Web请求只创建一个上下文实例,或者将上下文拆分为它的组件部分,以便可以在没有冲突的情况下注入两者。以上就是C#学习教程:UserManagererror-在前面的异步操作完成之前,在这个上下文中启动了第二个操作,分享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: