Что делает этот system.threading._threadpoolwaitcallback.performwaitcallback() и другие методы?

#asp.net-mvc #clr #appdomain #callstack

#asp.net-mvc #clr #домен приложения #стек вызовов

Вопрос:

Я отлаживаю приложение .net mvc3. Затем я открыл окно вывода под названием: call stack , чем я увидел много вещей….Я погуглил и «msdned», но ответа не получил. Может кто-нибудь, пожалуйста, скажите мне, что делают следующие методы? Большое вам спасибо! вам не нужно рассказывать мне все перечисленные методы, но некоторые из «важных», на ваш взгляд.

ps: мои базовые знания: я однажды прочитал книгу «CLR через C #», но еще не до конца понял ее.Я немного знаю об управлении памятью, GC, домене приложений и т.д.Только самое основное, вы же знаете 🙂

РЕДАКТИРОВАТЬ 1 следующее вставлено из стека, поэтому, пожалуйста, вы можете объяснить их снизу вверх, это более прямолинейно 🙂

РЕДАКТИРОВАТЬ 2 Я знаю, что это «большой» вопрос, вы можете просто сказать мне, какой блог, веб-страницу или книгу и т.д. я должен прочитать, чтобы получить больше понимания 🙂 спасибо 🙂

 System.Web.Mvc.Controller.RedirectToAction(string actionName, string controllerName, object routeValues) 
System.Web.Mvc.ActionMethodDispatcher.Execute(System.Web.Mvc.ControllerBase controller, object[] parameters)
System.Web.Mvc.ReflectedActionDescriptor.Execute(System.Web.Mvc.ControllerContext controllerContext,     System.Collections.Generic.IDictionary<string,object> parameters)
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ActionDescriptor actionDescriptor, System.Collections.Generic.IDictionary<string,object> parameters) 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters.AnonymousMethod__12() 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(System.Web.Mvc.IActionFilter filter, System.Web.Mvc.ActionExecutingContext preContext, System.Func<System.Web.Mvc.ActionExecutedContext> continuation) 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters.AnonymousMethod__14() 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(System.Web.Mvc.ControllerContext controllerContext, System.Collections.Generic.IList<System.Web.Mvc.IActionFilter> filters, System.Web.Mvc.ActionDescriptor actionDescriptor, System.Collections.Generic.IDictionary<string,object> parameters) 
System.Web.Mvc.ControllerActionInvoker.InvokeAction(System.Web.Mvc.ControllerContext controllerContext, string actionName) 
System.Web.Mvc.Controller.ExecuteCore() 
System.Web.Mvc.ControllerBase.Execute(System.Web.Routing.RequestContext requestContext) 
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(System.Web.Routing.RequestContext requestContext) 
System.Web.Mvc.MvcHandler.BeginProcessRequest.AnonymousMethod__5() 
System.Web.Mvc.Async.AsyncResultWrapper.MakeVoidDelegate.AnonymousMethod__0()
System.Web.Mvc.Async.AsyncResultWrapper.BeginSynchronous<System.Web.Mvc.Async.AsyncVoid>.AnonymousMethod__7(System.IAsyncResult _) 
System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult<System.Web.Mvc.Async.AsyncVoid>.End()
System.Web.Mvc.MvcHandler.EndProcessRequest.AnonymousMethod__d() 
System.Web.Mvc.SecurityUtil.GetCallInAppTrustThunk.AnonymousMethod__0(System.Action f)
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(System.Action action) 
System.Web.Mvc.MvcHandler.EndProcessRequest(System.IAsyncResult asyncResult) 
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(System.IAsyncResult result) 
System.Web.dll!System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep step, ref bool completedSynchronously)  
System.Web.dll!System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(System.Exception error) System.Web.dll!System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext context, System.AsyncCallback cb, object extraData)  
System.Web.dll!System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest wr)  
System.Web.dll!System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest wr)   
System.Web.dll!System.Web.HttpRuntime.ProcessRequest(System.Web.HttpWorkerRequest wr)   
WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Request.Process()   0x17b WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Microsoft.VisualStudio.WebHost.Connection conn)  
WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(object acceptedSocket)    
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state)      
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool ignoreSyncCtx)     
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()   
mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()   
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()   0x2d
 

Комментарии:

1. Я вижу ту же сигнатуру проблемы. Но я вижу это в контексте простой страницы .ashx, которая использует System.Data.SqlClient для вызова sql-сервера. Вот как выглядит мой стек, согласно visual studio: Microsoft.VisualStudio.WebHost.Server.OnSocketAccept() System.Threading.QueueUserWorkItemCallback.WaitCallback_Context() System.Threading.ExecutionContext.Run() System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() System.Threading.ThreadPoolWorkQueue.Dispatch() System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

2. Дополнительное примечание: в моем случае проблема заключалась в простом (и неправильном) рекурсивном вызове в моем управляемом коде. Приведенная выше трассировка стека была «действительной» — просто бесполезной для изоляции проблемы. — Я подозреваю, что ваша проблема, вероятно, аналогична. Когда происходит переполнение стека, может быть не так, что исключение возникает в домене приложения, которым вы управляете, это необходимо исправить.