小编nur*_*guy的帖子

.net Core Parallel.ForEach问题

我已经切换到某些项目的.net Core,现在我遇到了Parallel.ForEach的问题.在过去,我经常有一个id值列表,然后我将用它来发送Web请求以获取完整数据.它看起来像这样:

Parallel.ForEach(myList, l =>
{
    // make web request using l.id 
    // process the data somehow
});
Run Code Online (Sandbox Code Playgroud)

好吧,在.net Core中,必须标记所有Web请求await,这意味着必须标记Parallel.ForEach操作async.但是,将Parallel.ForEach操作标记为async意味着我们有一个void async导致问题的方法.在我的特定情况下,这意味着响应在并行循环中的所有Web请求完成之前返回到应用程序,这既尴尬又导致错误.

问题:在这里使用Parallel.ForEach的替代方法是什么?

我发现一个可能的解决方案是将Parallel循环包装在Task中并等待任务:

await Task.Run(() => Parallel.ForEach(myList, l =>
{
    // stuff here
}));
Run Code Online (Sandbox Code Playgroud)

(在这里找到:Parallel.ForEach vs Task.Run和Task.WhenAll)

但是,这对我不起作用.当我使用它时,我仍然在循环完成之前返回应用程序.

另外一个选项:

var tasks = new List<Task>();
foreach (var l in myList)
{
    tasks.Add(Task.Run(async () =>
    {
         // stuff here
    }));
}
await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但这是唯一的选择吗?似乎新的.net Core已经使Parallel.ForEach几乎无用(至少在嵌套Web调用时).

任何帮助/建议表示赞赏.

c# parallel-processing

6
推荐指数
2
解决办法
1万
查看次数

ViewBag 未从基本控制器传递

我们已将我们的应用程序转换为 ASP.NET Core,但我在正确填充 ViewBag 时遇到了问题。我们有以下基本控制器

public abstract class ControllerBase : Controller
{
    public ControllerBase()
    {
        ViewBag.Title = "MySite";
    }
  ...// lots of other stuff here also
}
Run Code Online (Sandbox Code Playgroud)

我们所有的其他控制器都继承自ControllerBase但是当我们到达视图并使用以下内容时

@{
    ViewBag.Title = ViewBag.Title + " - " + Model.PageTitle;
}
Run Code Online (Sandbox Code Playgroud)

但在视图中ViewBag.Title是空的。它不会导致错误,但我们最终只得到“ - MyPage”而不是“MySite - MyPage”作为浏览器标题。

这一切在以前版本的 .net 中都可以正常工作,只是现在在 ASP.NET Core 中无法正常工作。当我逐步调试调试器时,我看到ControllerBase正在调用构造函数,但 ViewBag 数据没有持久化。

这给我留下了两个问题:

  1. ASP.NET Core 中是否有一些新的/不同的东西改变了 ViewBag 的范围?
  2. 解决此问题的最佳方法是什么?(没有在一堆地方添加价值。)

编辑:我在基本控制器的第一行设置了一个调试器停止,并将ViewBag.Title设置作为我的观察变量逐步完成。当我逐步完成时,我可以看到值被设置,然后我从基本控制器移动到特定动作控制器的构造函数。当我逐步执行该构造函数时,ViewBag.Title仍然设置。只要我打的第一线Index()方法ViewBag.Title轮流null

Edit2:这是一个简单的 foo 项目,说明了这个问题 https://github.com/nurdyguy/ViewBagIssue

c# asp.net-core-mvc asp.net-core

5
推荐指数
1
解决办法
2439
查看次数