问题标签 [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# - BackgroundWorker 的任务并行库替换?
任务并行库是否有任何可以被视为对 BackgroundWorker 类的替代或改进的东西?
我有一个带有向导式 UI 的 WinForms 应用程序,它执行一些长时间运行的任务。我希望能够拥有一个带有标准进度条和取消操作能力的响应式 UI。我以前用 BackgroundWorker 做过这个,但我想知道是否有一些 TPL 模式可以用来代替?
c# - 为什么调试与不调试(取消任务)运行不同?
我编写了一个程序来测试 C# 4.0 中的并行编程。但是,有一个问题,我不知道为什么。
我写了一个方法
它在单独的线程(UI线程除外)上运行。
和功能(简化)
问题是,当tokenSource被取消时,会出现“OperationCanceledException is nothandled by user code”的错误,就好像catch块不存在一样。我不知道为什么,因为我的代码类似于教科书和 MSDN 中的代码。
谢谢你。
编辑:实际上我在不到一个月前写了一个类似的程序,那时一切都很好。今天我再次尝试运行它,同样的问题发生了。我在完成程序后安装了 Microsoft Visual Web Developer 2010 Express,不知道是不是这个原因。我不明白,相同的代码,不同的结果。
编辑:我想到了这个问题,发现哪里错了。过去,我使用“不调试运行”,而现在使用调试。在不调试的情况下运行可以解决问题。如果有人告诉我为什么调试与“无调试运行”不同,我将不胜感激。
multithreading - 有没有办法限制任务并行库使用的线程?
我正在使用 TPL,但我发现使用它的单元测试代码很棘手。
我试图不引入包装器,因为我觉得它可能会引入问题。
我知道您可以在 TPL 中设置处理器关联,但真正好的是设置线程最大值(可能每个应用程序域)。因此,当将线程最大值设置为 1 时,TPL 将被迫使用它所使用的任何线程。
你怎么看?这可能吗(我很确定不是),应该可能吗?
编辑:这是一个例子
除非我引入延迟,否则测试可能不会通过。我想要这样的东西,Task.MaximumThreads=1
以便 TPL 可以串行运行。
visual-studio-2010 - 在 Visual Studio 2010 RTM 中看不到并行任务窗口
并行任务窗口应位于 Visual Studio 中的“调试”>“窗口”下。但是,我在那里只看到“断点”。我错过了什么吗?
c# - 使用任务并行库实现“仅一个”和“不并行”语义
使用以下操作的 KEY 实施任务的最佳方法是什么:-
选项 1) 只有一个密钥是未决的。例如,可用于从 ASP.NET MVC 为缩略图图像排队单个渲染,无论图像 Url 被点击多少次。只有一个运行,所有其他请求等待那个完成。
选项 2) 具有相同键的所有项目必须按顺序执行。例如,可用于确保从后备存储获取文件到本地缓存的操作不会同时尝试将文件获取到缓存。选项 1 是一种特殊情况,其中具有相同键的后续操作被简单地丢弃(通常只保存文件存在检查)。
我有一个现有的 WorkQueue 可以处理这两种情况(以及 Apartment 状态、ThreadPriority 设置和最大并行度)。TPL 似乎是替代它的最佳解决方案,并将带来改进的取消选项。
带有延续的嵌套任务看起来很有希望,但维护当前排队任务的字典很快就会在 TaskFactory 和 TaskScheduler 类之间变得混乱。从 Task 继承也是有问题的,因为 TaskFactory 和 TaskScheduler 在 Task 上都不是通用的。
大多数任务并行示例假设任务集是提前知道的。在这种情况下,新任务一直被添加,需要根据请求的操作和传入的密钥被丢弃或链接到现有任务上。
有没有人使用 TPL 实现过类似的东西,如果有,你在 Task、TaskScheduler 和 TaskFactory 类中采用了什么方法?
c# - 如何在 .NET 4 中将异步操作与任务并行库链接?
我正在尝试以编程方式链接 C#4 中的异步操作,例如写入给定的 Stream 对象。我最初是“手动”执行此操作的,将回调从一个操作挂钩到下一个操作,但我想我会尝试使用 .NET 4 任务并行库来省去重新发明并发轮子的麻烦。
首先,我将异步调用包装在 Tasks 中,如下所示:
延续使链接同步操作变得非常容易(如果您原谅不幸的方法名称):
但是没有任何版本的Task.ContinueWith
方法可以像TaskFactory.FromAsync
.
因此,假设我坚持使用 TPL,我正在寻找此方法的正确实现:
.net - 使用 .NET 4.0 中的任务并行库等待所有任务完成
是否有更短的方法来等待多个线程完成?也许使用 ContinueWhenAll... 但我不想异步运行其余代码。
c - 使用 TPL 在结构中序列化 wchar_t*
我正在尝试使用 tpl 序列化包含 wchar_t* 字符串的结构。
我的代码看起来像这样,但它不起作用:
如果我用“1234”替换中文“字符串”字符串,它只会打印“1”——如果我更改定义以便结构用户使用 char*(并且我只将 ASCII 字符推入其中),它就可以正常工作。但是我不知道如何让它正确地序列化和反序列化 wchar_t* 字符串。
c# - 重新启动任务还是创建新任务?
我正在开发一个每 30~80 秒创建 20~50 个新任务的项目。每个任务的生存时间为 10~20 秒。
所以我使用计时器来创建这些新任务,但每次我总是重新创建相同的任务时,代码是这样的:
我的问题是,有任何方法可以创建任务并继续重新启动它,所以我不需要启动新任务Task.Factory.StartNew(service.Execute); 每次?
或者那是我不必担心的事情,并且可以继续创建新任务?
关于我应该如何使用这种线程在这种情况下工作的任何指南/最佳实践?