问题标签 [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.
c# - Parallel.Invoke() 是否总是使用它的调用线程?
如果我有以下程序
然后在.net core 3.1下它会产生类似的输出
我现在的问题是它保证Parallel.Invoke()
会使用它的调用线程来完成它给出的部分或全部工作吗?就像这会在每个平台或框架上出现,还是在 WPF 或 WinForms 等一些 UI 框架上表现不同。
我的问题也不是它是否会阻塞调用线程,而是调用线程是否会做一些工作。
例如,上述代码的输出可以是
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的模拟
c# - 在 ASP MVC 5 Web 应用程序中,用于获取数据的 EntityF6 查询的 Async vs Parallel.Invoke vs Task.WhenAll
我试图弄清楚除了同步编程之外,执行一些检索数据的 EF6 查询的最佳方法是什么。我将在这里发布所有 5 种方法(这些方法发生在 Controller Action 中):
方法实现:
- 如果我理解正确,
await
对于 2 个任务(例如在 C2 和 C2.1 中)不会使它们并行运行(甚至在我先启动它们然后等待的 C.1 示例中也不),它只是释放当前线程并给它们到另外 2 个不同的线程来处理这些任务 - Task.Run() 实际上会像 Invoke.Parallel 那样做,将工作分散到 2 个不同的 CPU 上,使它们并行运行
- 先启动它们然后等待(C.1 示例)不应该使它们以某种并行方式运行吗?
- 完全不使用异步或并行会更好吗?
请让我了解这些示例如何获得异步和更好的性能,如果我必须考虑对 EntityF 的任何影响。我已经读了几天了,我只是感到困惑,所以请不要给我另一个阅读链接:)
c# - 在 Parallel.Invoke 中更新同一对象的不同属性是线程安全的吗?
我正在使用一个包含复杂属性的类。这些属性中的每一个都是通过不同的方法计算的。我Parallel.Invoke
用来更新同一个对象的不同属性。这会对对象造成任何问题吗?
上面的代码会导致任何问题testResult
吗?
注意:我已经测试了这部分代码。似乎不会引起任何问题。据我所知,由于不同的属性在不同的任务中得到处理,这应该不是问题。我找不到与此相关的任何文档。我想确认这种行为,因此提出了这个问题。
c# - 在运行时添加和删除 Parallel.Invoke 操作
我正在使用Parallel.Invoke
同时运行某些方法并在所有方法完成后收集结果。
问题
正如您在“可怕的代码”部分看到的那样,动作列表被硬编码为三个元素,如果detectedDevicesList.Count != 3
.
尝试过的解决方案
我尝试动态创建一个Actions[]
数组并将其作为参数传递给Parallel.Invoke
,但我无法将现有方法转换为Task
s,然后再转换为Action
s。
非工作代码
编辑:给读者的有用信息和经验教训
在收到出色的答案和评论之后,我添加了一些最初缺失的代码,这些代码可以帮助您安全地与并行任务中的 Windows 窗体对象进行交互。
此外,不要盲目遵循 IntelliSense 建议,以防止像 Task<Task> 这样的恶作剧,或在 C# 上使用类似 Java 的大小写。
很难选择最佳建议的答案,因为它们都可以正常工作并且没有任何明显的性能差异(MakePhoneCall().call 使用通过 ADB 连接的 Android 设备进行自动电话呼叫)。检查哪个答案最适合您的特定应用。
c# - 在 Parallel.Invoke 中取消任务
据我了解, ( 和 ) 中的所有三个静态方法都在后台Parallel
创建任务。For
ForEach
Invoke
您可以通过取消内部的令牌来停止创建这些任务ParallelOptions
。
我做了两个简单的例子。
在第一个中使用For
第二个中的方法Invoke
。
在该For
方法的情况下,行为是预期的,在取消令牌后,新任务的创建将停止。在该Invoke
方法的情况下,这不会发生。无论我在 Invoke 方法中放了多少方法,它们总是在令牌取消后执行。我不明白为什么会这样。
在docs.microsoft.com 的Parallel.Invoke
方法中
有人说:
与结构一起传递的取消令牌
ParallelOptions
使调用者能够取消整个操作。
问题:为什么在 Invoke 方法的情况下,所有任务都已执行,而取消令牌则无济于事?或者也许我做错了什么,然后告诉我什么。