0

我目前正在运行一个简单的代码和平,它呈现部分视图并将结果添加到 ConcurrentBag:

Threading.Tasks.Parallel.For(0, Model.Count,
                                Sub(i)
                                    carXmls.Add(Html.Partial("PublisherVehicleXml16", Model(i)))
                                End Sub)

可悲的是,每隔一段时间这个东西就会崩溃,但有以下例外:Stack empty.

这会间歇性地发生,并且仅在我们的登台和生产环境中发生。这可能来自哪里的任何想法?

编辑: carsXmls 声明如下:

   Dim carXmls As New Collections.Concurrent.ConcurrentBag(Of MvcHtmlString)

完全的例外是:

消息堆栈为空。

系统

目标站点T Pop()

1.Pop() at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) 在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String) 的 System.Collections.Generic.Stack 1 继续的堆栈跟踪动作名称)

4

1 回答 1

0

您正在使用 ASP.NET 对象的多个线程上运行代码。ASP.NET (MVC) 不保证这是安全的。如您所见,这是不安全的。

简而言之,您不能同时使用 ASP.NET 基础结构。

我建议您提取所有繁重的计算,以便您可以在不使用 ASP.NET 对象的情况下并行它们。然后,您可以按顺序渲染视图。

于 2012-07-30T10:16:24.180 回答