问题标签 [parallel.invoke]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
52 浏览

c# - Parallel.Invoke() 是否总是使用它的调用线程?

如果我有以下程序

然后在.net core 3.1下它会产生类似的输出

我现在的问题是它保证Parallel.Invoke()会使用它的调用线程来完成它给出的部分或全部工作吗?就像这会在每个平台或框架上出现,还是在 WPF 或 WinForms 等一些 UI 框架上表现不同。

我的问题也不是它是否会阻塞调用线程,而是调用线程是否会做一些工作。

例如,上述代码的输出可以是

0 投票
1 回答
96 浏览

c# - 我们可以在 Xamarin iOS 中并行调用方法(带参数)吗?

我有一个使用 Parallel.Invoke 的 Xamarin 应用程序,它在 Android 上运行良好。

但是我现在正在尝试在 iOS 版本上工作,它崩溃不是因为 Parallel.Invoke 而是因为 lambda 表达式() =>

如果我使用以下操作执行 Parallel.Invoke,它将在 iOS 上运行,但我不会有我的参数:

我尝试使用 Tasks 而不是 parallel.invoke,但由于我的代码不使用异步,我必须() =>在某个时候使用 lambda 表达式,在这里或其他地方。

我也尝试过使用委托,但它在 iOS 上也不起作用。所以到目前为止我发现的唯一选择是使用 System.Action 而不是普通方法,并将参数存储在其他地方以便在操作中访问。或者有两个版本的代码,一个带有用于 android 的 parallel.invoke,一个没有用于 iOS。

如果您知道更好的选择,或者您知道为什么 lambda 表达式在 Xamarin iOS 上不起作用,请告诉我。

对于我正在使用的参考资料:

  • Xamarin 形式 v4.4.0.991265
  • iPhone8和iPhone11 pro的模拟
0 投票
1 回答
164 浏览

c# - 在 ASP MVC 5 Web 应用程序中,用于获取数据的 EntityF6 查询的 Async vs Parallel.Invoke vs Task.WhenAll

我试图弄清楚除了同步编程之外,执行一些检索数据的 EF6 查询的最佳方法是什么。我将在这里发布所有 5 种方法(这些方法发生在 Controller Action 中):

方法实现:

  1. 如果我理解正确,await对于 2 个任务(例如在 C2 和 C2.1 中)不会使它们并行运行(甚至在我先启动它们然后等待的 C.1 示例中也不),它只是释放当前线程并给它们到另外 2 个不同的线程来处理这些任务
  2. Task.Run() 实际上会像 Invoke.Parallel 那样做,将工作分散到 2 个不同的 CPU 上,使它们并行运行
  3. 先启动它们然后等待(C.1 示例)不应该使它们以某种并行方式运行吗?
  4. 完全不使用异步或并行会更好吗?

请让我了解这些示例如何获得异步和更好的性能,如果我必须考虑对 EntityF 的任何影响。我已经读了几天了,我只是感到困惑,所以请不要给我另一个阅读链接:)

0 投票
1 回答
96 浏览

c# - 在 Parallel.Invoke 中更新同一对象的不同属性是线程安全的吗?

我正在使用一个包含复杂属性的类。这些属性中的每一个都是通过不同的方法计算的。我Parallel.Invoke用来更新同一个对象的不同属性。这会对对象造成任何问题吗?

上面的代码会导致任何问题testResult吗?

注意:我已经测试了这部分代码。似乎不会引起任何问题。据我所知,由于不同的属性在不同的任务中得到处理,这应该不是问题。我找不到与此相关的任何文档。我想确认这种行为,因此提出了这个问题。

0 投票
3 回答
111 浏览

c# - 在运行时添加和删除 Parallel.Invoke 操作

我正在使用Parallel.Invoke同时运行某些方法并在所有方法完成后收集结果。

问题

正如您在“可怕的代码”部分看到的那样,动作列表被硬编码为三个元素,如果detectedDevicesList.Count != 3.

尝试过的解决方案

我尝试动态创建一个Actions[]数组并将其作为参数传递给Parallel.Invoke,但我无法将现有方法转换为Tasks,然后再转换为Actions。

非工作代码

编辑:给读者的有用信息和经验教训

在收到出色的答案和评论之后,我添加了一些最初缺失的代码,这些代码可以帮助您安全地与并行任务中的 Windows 窗体对象进行交互。

此外,不要盲目遵循 IntelliSense 建议,以防止像 Task<Task> 这样的恶作剧,或在 C# 上使用类似 Java 的大小写。

很难选择最佳建议的答案,因为它们都可以正常工作并且没有任何明显的性能差异(MakePhoneCall().call 使用通过 ADB 连接的 Android 设备进行自动电话呼叫)。检查哪个答案最适合您的特定应用。

0 投票
1 回答
85 浏览

c# - 在 Parallel.Invoke 中取消任务

据我了解, ( 和 ) 中的所有三个静态方法都在后台Parallel创建任务。ForForEachInvoke

您可以通过取消内部的令牌来停止创建这些任务ParallelOptions

我做了两个简单的例子。

在第一个中使用For第二个中的方法Invoke

在该For方法的情况下,行为是预期的,在取消令牌后,新任务的创建将停止。在该Invoke方法的情况下,这不会发生。无论我在 Invoke 方法中放了多少方法,它们总是在令牌取消后执行。我不明白为什么会这样。

docs.microsoft.com 的Parallel.Invoke方法中 有人说:

与结构一起传递的取消令牌ParallelOptions使调用者能够取消整个操作。

问题:为什么在 Invoke 方法的情况下,所有任务都已执行,而取消令牌则无济于事?或者也许我做错了什么,然后告诉我什么。