问题标签 [taskfactory]

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 投票
3 回答
8620 浏览

.net - TaskFactory.StartNew 与 ThreadPool.QueueUserWorkItem

显然TaskFactory.StartNew,.NET 4.0 中的方法旨在替代ThreadPool.QueueUserWorkItem无论如何,根据这篇文章)。我的问题很简单:有人知道为什么吗?

TaskFactory.StartNew有更好的表现吗?它使用更少的内存吗?还是主要是为了Task类提供的附加功能?在后一种情况下,性能StartNew可能QueueUserWorkItem?

在我看来,StartNew实际上可能会使用比更多的内存QueueUserWorkItem,因为它Task每次调用都会返回一个对象,我希望这会导致更多的内存分配。

无论如何,我很想知道哪个更适合高性能场景。

0 投票
4 回答
48665 浏览

c# - 降低 Task.Factory.StartNew 线程的优先级

下面的代码将启动一个新线程来完成这项工作。有什么办法可以控制该线程的优先级吗?

0 投票
2 回答
2790 浏览

.net - 如何添加任务优先级功能

我将任务库用于我的图像压缩服务。我会压缩许多文件并发。但我希望服务仅在用户空闲时运行(或程序中不再有重要的任务)。

我知道 threadPool 不支持“更改线程优先级”功能,所以任务也支持此功能。

我可以在更高级别的控制上开发该功能吗?(例如 TaskScheduler 优先级)

0 投票
3 回答
6574 浏览

c# - Task.Factory.StartNew "action" 参数和更高级别的局部变量

考虑一下:

现在,我的问题是:我可以在 lambda 表达式中使用 dataRequest,而不是将其作为第二个参数传递给 StartNew 方法吗?我担心的是 - 该方法将在不同的线程上执行,我不确定 dataRequest 在那里使用时是否会保持其状态。

0 投票
2 回答
19837 浏览

c#-4.0 - TPL TaskFactory.FromAsync 与具有阻塞方法的任务

TaskFactory.FromAsync我想知道使用 TPL和使用TaskFactory.StartNew方法的阻塞版本之间是否有任何性能影响。我正在编写一个支持不超过 100 个并发连接的 TCP 服务器。在使用第一个选项编写代码并使用 continue with 链接多个读写操作之后,我留下了丑陋、难以调试的代码。

我相信用同步版本编写代码然后用任务包装它会降低复杂性并增加可测试性,但我担心这样做会影响性能。

例如,这两个调用之间是否存在任何性能差异:

0 投票
3 回答
2373 浏览

wpf - 服务中的 WPF FormattedText“系统找不到指定的文件”异常

我们正在使用 WPF FormattedText 对象来确定从 RSS 提要中获取最新新闻标题的服务中的文本大小。检索到的文本需要采用指定的画布大小。该服务每 10 秒运行一次代码,如果一个线程需要更长的时间,则最多使用 2 个线程。我正在使用 TaskFactory(我已经覆盖了 LimitedConcurrencyLevelTask​​Scheduler 以限制我指定的线程数量)。

这很好用,除了几天后(长度可变),我们开始得到以下异常。在我们开始使用 TPL 使其成为多线程之前,相同的代码运行良好。

我需要帮助找出这是由什么引起的。我正在研究的一些想法是:保留 TTF 文件的线程冲突、内存问题、调度程序(参见堆栈跟踪)不能很好地与 TaskFactory 配合使用,其他?我们没有很好的分析设置,但是当异常发生并且内存使用看起来正常时,我们已经查看了 TaskManager。我的下一个尝试是使用 TextBlock 对象并查看是否避免了异常。

错误信息:系统找不到指定的文件错误源:WindowsBase 错误目标站点:UInt16 RegisterClassEx(WNDCLASSEX_D)

异常堆栈跟踪:

在 MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d) 在 MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook [] 钩子)在 System.Windows.Threading.Dispatcher.get_CurrentDispatcher() 在 System.Windows.Media.TextFormatting.TextFormatter.FromCurrentDispatcher(TextFormattingMode textFormattingMode) 在 System.Windows 的 System.Windows.Threading.Dispatcher..ctor()。 Media.FormattedText.LineEnumerator..ctor(FormattedText text) at System.Windows.Media.FormattedText.DrawAndCalculateMetrics(DrawingContext dc, Point drawingOffset, Boolean getBlackBoxMetrics) at System.Windows.Media.FormattedText.get_Metrics() at (我的方法使用FormattedText,在循环中)

编辑:到目前为止,我已经尝试在调用此函数的代码周围放置一个锁,并在 CurrentDispatcher.Invoke 方法中调用它,如下所示:

编辑:我发现其他人有类似的链接,但不是确切的问题。 http://www.eggheadcafe.com/software/aspnet/31783898/problem-creating-an-bitmapsource-from-an-hbitmap-in-threaded-code.aspx ~有类似的问题,但没有答案

System.Windows.Media.DrawingVisual.RenderOpen() 一段时间后出错〜有类似的问题,但没有答案

http://connect.microsoft.com/VisualStudio/feedback/details/361469/net-3-5-sp1-breaks-use-of-wpf-under-iis# ~ 类似的例外,但我们没有使用 3.5SP1或 IIS 7。

我还通过 Microsoft Connect 站点提交了此文件(如果您遇到类似问题,请投票)。 https://connect.microsoft.com/WPF/feedback/details/654208/wpf-formattedtext-the-system-cannot-find-the-file-specified-exception-in-a-service

编辑:来自 Microsoft 的回复:“WPF 对象需要在 Dispatcher 线程上创建,而不是线程池线程。我们通常建议使用一个线程来运行 Dispatcher 循环来服务请求以创建对象并将它们冻结返回。谢谢,WPF 团队” 〜我将如何实现这个?

编辑:感谢 NightDweller 的最终解决方案

编辑:当我部署更改 (new Application();) 时,我收到一条错误记录“无法在同一个 AppDomain 中创建多个 System.Windows.Application 实例。” 错误来源:PresentationFramework 错误目标站点:Void .ctor()

0 投票
1 回答
6811 浏览

.net - 如何使用 TaskFactory.FromAsync 和自定义 Async 过程创建任务

我正在尝试测试一些依赖 Task 进行后台计算的类(从网络位置检索数据)。该类获取一个未启动的任务实例,添加一个 ContinueWith 方法,然后在该任务上调用 Start。像这样的东西:

该类通过接口获取 Task 的实例,因此我能够注入我的测试控制的 Task 实例。但是,我似乎无法创建一个我有足够控制权的东西。

我不想在测试中引入线程,但仍然想让Task异步运行,所以我尝试做的是编写一个实现BeginInvoke/EndInvoke模式的类,没有线程,并使用TaskFactory.FromAsync方法创建任务。

这个想法是测试可以调用启动任务的类上的方法,然后当它返回时,测试可以将结果数据提供给 Async 对象,该对象完成操作,同时保持在同一个线程上。

但是,当我尝试在该任务上调用 Start 时,我收到一条错误消息,指出“可能不会在具有空操作的任务上调用 Start”。不幸的是,谷歌对该消息没有太大帮助,所以我不确定我是否错误地实现了我的 Async 对象,或者错误地使用了 TaskFactory.FromAsync。这是我的 NonThreadedAsync 类的代码和一个因异常而崩溃的测试:

作为进一步的信息,如果我调试该测试,就在它调用 Start() 之前,任务实例将显示在 Locals 窗口中,如下所示:

Id = 1, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"

但是如果我展开它,可见属性中没有 Method 属性。

谁能看到我做错了什么?

[编辑:我还编写了一个测试,确认 NonThreadedAsync 类与经典的 Begin/End 模式(或者至少,对 Begin/End 模式的理解 :))正常工作,并且通过了:

0 投票
1 回答
322 浏览

vb.net - 处理任务工厂异常

我已经建立了一个流程来创建新任务来处理文件处理。在我收到未处理的异常错误并单击继续按钮时出现问题,主进程继续运行。现在我还发现在子任务中我遇到了文件冲突错误,并且由于任务作为单独的 .exe 运行,我的印象是一切都是线程安全的。所以这里的第一个问题是在主流程中创建任务。GProcess 是一个完整的项目,由 6 个类组成。这是作为类库引用添加到主流程类form1

现在我从 msdn 得到了聚合异常的东西,不知道如何实现它,但基本上我想要的是取消导致异常的任务并继续运行所有其他任务并捕获被取消任务正在处理的文件并保存名称到我的日志,或者如果可能的话,用它正在处理的文件重新启动该任务..

现在对于第二个问题,当任务访问一个类时,我创建了一个 xmlwriter,该任务应该创建它自己的实例,所以不确定为什么会发生冲突,但如果确实发生了,任务/线程是取消还是取消它等待访问文件。

0 投票
1 回答
193 浏览

c# - Windows 服务中的 TaskFactory

我的应用程序正在使用 TaskFactory 来完成它的工作。如果用户希望我的应用程序的某些实例启动,当他们登录时,他们会将其作为启动条目。为避免这种情况,我希望创建一个会产生多个线程的服务,该服务将与我的应用程序执行相同的工作。因为 TaskFactory 使用 ThreadPool 并且每个应用实例只有一个线程池,这会影响我的性能吗?

0 投票
1 回答
862 浏览

task-parallel-library - 为什么 TaskFactory.StartNew 与 Task.ContinueWith 结合使用?

TaskFactory.StartNew()创建一个新任务,启动它然后返回它。我想可以安全地假设以下代码将始终有效(因为它取自 MSDN):

这是如何运作的?如何确保在.ContinueWith()调用之前任务尚未开始(甚至完成)?