问题标签 [task-parallel-library]
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# - 是否有一种有效的方法可以将 System.Threading.Tasks 与 WCF 服务代理一起使用?
在阅读了最近一篇关于任务调度程序的 MSDN 杂志文章后,我希望(并且实际上非常兴奋)使用它会有益于我使用 WCF 生成的代理。
我希望获得以下一些好处:
- 1)能够中止正在运行的 WCF 操作(我不希望这会停止服务器上的操作 - 我只是希望能够发出信号'我不想要此任务的结果'。这是在 UI 中尤其常见,其中有人从触发服务调用的网格中重复选择项目。)
- 2) 能够在创建任务之外的某个时间点启动任务——我不确定我是否真的需要这个,我只是认为生成一个任务而不是立即运行它可能会很好。毕竟我认为这就是任务的全部意义所在。
- 3) 可绑定属性——因此我可以将我的 WCF UI 绑定到
IsCompleted
并让 Task 类从我的 UI 中抽象出操作的内部结构。 - 4)能够抽象出操作的运行- 模拟,等等等等,未来的重构等。
但是 - 我似乎没有得到任何这些好处。
- 1)Task 中没有中止功能——这让我觉得很奇怪。
- 2)我可以使用的唯一重载
Task.Factory.FromAsync<>
是下面显示的重载。这会立即开始执行 web 服务操作(如 Fiddler 中所示),并且不允许我稍后开始调用。 - 3) 任务没有实现
INotifyPropertyChanged
,所以我无法将它绑定到 UI。 - 4)鉴于其他3个好处没有发生,这个有点死在水中:-(
Sooo .... 我只是在浪费时间试图让 WCF 生成的代理与任务一起工作——还是我错过了一些东西。
c# - 是否可以在执行 Parallel.ForEach 期间更改 parallelOptions.MaxDegreeOfParallelism
我正在运行一个多线程循环:
我想在并行循环执行期间更改 parallelOptions.MaxDegreeOfParallelism 以减少或增加线程数。
它似乎没有增加线程。有没有人有任何想法?
c# - 任务构造函数中的取消标记:为什么?
某些System.Threading.Tasks.Task
构造函数将 aCancellationToken
作为参数:
令我感到困惑的是,无法从方法主体内部实际获取传入的令牌(例如,没有类似的Task.CurrentTask.CancellationToken
)。令牌必须通过其他机制提供,例如状态对象或在 lambda 中捕获。
那么在构造函数中提供取消令牌的目的是什么?
c#-4.0 - Parallel.Invoke - 异常处理
我的代码运行 4 个函数来将信息(使用调用)填充到一个类中,例如:
我的问题是:如果他不是素食者,我不能返回 null,但我希望能够停止所有线程,停止处理并返回 null。如何实现?
c# - 不在 TPL Task 对象上调用 Dispose() 是否可以接受?
我想触发一个任务在后台线程上运行。我不想等待任务完成。
在 .net 3.5 中,我会这样做:
在 .net 4 中,TPL 是建议的方式。我见过推荐的常见模式是:
但是,该StartNew()
方法返回一个Task
实现IDisposable
. 推荐这种模式的人似乎忽略了这一点。该Task.Dispose()
方法的 MSDN 文档说:
“在发布对任务的最后引用之前,请始终调用 Dispose。”
在任务完成之前,您不能对任务调用 dispose,因此让主线程等待并调用 dispose 将首先破坏在后台线程上执行的点。似乎也没有任何已完成/已完成的事件可用于清理。
Task 类的 MSDN 页面对此没有评论,《Pro C#2010...》一书推荐了相同的模式,对任务处理也没有评论。
我知道如果我只是离开它,终结器最终会抓住它,但是当我做很多火和忘记这样的任务并且终结器线程不堪重负时,这会回来咬我吗?
所以我的问题是:
Dispose()
在这种情况下不去上课是否可以接受Task
?如果是这样,为什么以及是否存在风险/后果?- 有没有讨论这个的文档?
- 或者是否有适当的方法来处理
Task
我错过的对象? - 还是有另一种使用 TPL 执行“开火即忘”任务的方法?
c# - Backgroundworker 和 TPL 的 Task 有相同的 ManagedThreadID?
我有一个 Backgroundworker,其目的是在后台按顺序运行作业。现在一项工作以多线程方式实现。这意味着,Backgroundworker 将创建多个线程。我使用任务并行库,所以我使用 Task.Factory.StartNew 创建多个任务。
任务运行后,Backgroundworker 等待所有任务完成。
现在我打印 Backgroundworker 的 ManagedThreadID 和所有任务的 ManagedThreadID。我发现BackgroundWorker的ManagedThreadID总是和第一个任务的ManagedThreadID一样。我认为这不应该发生,所以我无法解释。我认为 Backgroundworker 的线程必须与其创建的所有任务不同,因此 ManagedThreadID 必须彼此不同。
谁能解释为什么会发生这种情况?非常感谢你。
编辑:
代码与此类似:
您会发现其中一项任务与 Backgroundworker 具有相同的 ManagedThreadID。
.net-4.0 - 使用 .Net 4.0 新功能进行并行任务
我之前问过一个关于设计接收视频文件的服务的问题,将它们发送到编码服务,等待编码完成,然后下载文件。
我开始为此编写代码,我的一位同事建议我使用 .Net 4.0 的新功能,而不是使用 BackgroundWorker 编写它。我做了一些阅读,并行功能听起来很棒。我应该实现更多新功能吗?我是.net 4.0 的新手。
谢谢!
.net - TPL 与 InvokeRequired/Invoke
从 .NET 4.0 开始,就有了执行异步任务的 TPL。如果您正在阅读 msdn,所有与表单/UI 交互的异步操作仍然使用 InvokeRequire ... Invoke() 模式。我要问的是这有原因吗?据我所知,TPL 应该是旧线程机制的替代品。那么在涉及 UI 线程时忽略它有什么意义呢?对此有什么想法吗?
c# - 是否有机会用 TPL 替换 while 循环?
我有两个 while 循环,我将与 TPL 并行运行。
我的代码:
如果我能安全地取消这两个动作,那就太好了。你能给我一些建议吗?
提前致谢。
亲切的问候,亲
c# - 是否有 CHESS 的替代方法来测试使用任务并行库编写的程序
我正在寻找一种工具,它允许我使用使用任务并行库结构编写的程序对所有可能的交错(拼写?)执行单元测试。或者,我如何使用 dotNET 4.0 运行 CHESS?