问题标签 [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 投票
2 回答
1148 浏览

.net - 多线程进程中的 parallel.for 或 task.startnew

我有一个字符串列表,我需要将其传递给不同类中的进程。我想知道这两种想法中的哪一种在速度、效率和并行处理方面更适合使用。该列表包含 +- 10000 个字符串,我想适当地限制线程一次只运行大约 5 个线程:

任务工厂似乎工作正常,但不确定要实施哪个。

任何想法表示赞赏。

0 投票
3 回答
12771 浏览

c# - 睡眠任务(System.Threading.Tasks)

我需要创建线程来替换Windows 窗体窗口中的照片,而不是等待约 1 秒并恢复上一张照片。

我认为以下代码:

做这项工作,但不幸的是没有。它冻结了主 UI 线程。

那是因为不能保证每个任务有一个线程。一个线程可用于处理多个任务。甚至TaskCreationOptions.LongRunning选项也无济于事。

我该如何解决?

0 投票
1 回答
97 浏览

.net - 当某个时间帧经过时,从另一个任务启动一个任务线程

如何在一定时间 x 秒后从另一个 Task1 启动 ac# 4.0 Task2 (TPL)?

示例场景:

启动计算算法的 Task1。当计算至少需要 X 秒时,启动另一个任务来向用户展示一个不错的动画,而不是阻塞 UI。

0 投票
0 回答
271 浏览

asp.net - ASP.NET 中的 Task.Factory 超时

我一直在寻找有关异步任务超时设置的信息,但我找不到任何不涉及 wait() 的信息。也许我看错了。

我有一个 API 调用可能需要 10 分钟才能完成文件传输。我产生了一个新线程,因此用户不必坐下来观看这种情况发生。我添加了数据库更新,这样我就可以知道发生了什么。上传开始,几分钟后......什么都没有。传输被中止,没有抛出异常,也没有数据库更新。这一定意味着线程被丢弃了,对吧?我怎样才能让它活得更久?谢谢你的帮助。

0 投票
1 回答
726 浏览

c# - 当 Dispatcher.BeginInvoke 或 Task.StartNew 时 GUI 冻结

注意:取决于这个问题

你好。我有一个像这样的视图模型:

IPersonService实现中我这样做:

但是,我希望在执行搜索查询时,GUI 是免费的。但它冻住了!你知道我的错误在哪里吗?你能帮我吗?提前致谢!

0 投票
1 回答
244 浏览

.net - 在循环中对 Texture 执行 SetData 时具有 TaskFactory 执行时间的 XNA

虽然这个问题是关于 XNA 中的实现,但我认为它更适合更通用的 C# 论坛。我正在使用带有 XNA 的 TaskFactory 来初始化其他资源,同时向用户呈现加载屏幕。代码与此类似:

我已经记录了所需的时间,DoSomeFinalizingStuff当我的主窗口处于焦点时,我的方法将花费更长的时间。DoSomeFinalizingStuff实际使用SetData方法写入一个400x400的Texture2D(过程中不显示,只是创建和修改)。

对焦且可见时的 AVG 时间:~5000 毫秒(有时高达 10k+) 不对焦(且不可见)时的平均时间:~100 毫秒

测量的时间是 的实际执行时间DoSomeFinalizingStuff。那是 AVG 的 50 倍差异,我非常好奇,为什么会这样。

运行调试器时,所有链接的任务都需要大约一秒钟才能完成。在没有调试且没有交互的情况下运行时速度会慢很多,通常加载屏幕会在那里停留大约 10-15 秒,直到完成。

当我将焦点从主窗口移开时,我可以“触发”任务以更快地执行。一旦我切换出去,该功能就会被执行。

如果我删除 SetData() 调用,性能与调试或 Windows 不活动时相同。

为什么会发生这种情况,有没有办法修改这种行为?

0 投票
2 回答
1064 浏览

wcf - 任务持久性 C#

我很难让我的任务保持持久性并从 WCF 服务无限期地运行。我可能以错误的方式这样做,并愿意接受建议。

我有一个任务开始处理放入 BlockingCollection 的任何传入请求。据我了解,GetConsumingEnumerable() 方法应该允许我在数据到达时持续提取数据。它本身没有问题。我能够处理数十个请求,而没有一个错误或缺陷,使用 Windows 表单填写请求并提交它们。一旦我对这个过程充满信心,我就会通过 asmx Web 服务将它连接到我的站点,并使用 jQuery ajax 调用来提交请求。

站点根据提交的 url 提交请求,Web 服务从 url 下载 html 内容并在内容中查找其他 url。然后它继续为它找到的每个 url 创建一个请求,并将其提交给 BlockingCollection。在 WCF 服务中,如果应用程序处于联机状态(即任务已启动) - 它使用 GetConsumingEnumerable 通过 Parallel.ForEach 拉取请求并处理请求。

这适用于前几次提交,但随后任务意外停止。当然,这比我在测试中模拟的请求多 10 倍——但我预计它只会节流。我相信问题出在我启动任务的方法中:

我曾考虑将其移至 WF4 服务中,然后将其连接到工作流中并使用工作流持久性,但除非必要,否则我不愿意学习 WF4。如果需要更多信息,请告诉我。

0 投票
1 回答
880 浏览

c# - 任务工厂是顺序的而不是并行的?

我不是线程专家,但我想一次并行运行一个函数 N 次,如果需要,可以使用多个内核。

我目前有以下代码:

获取RSS 示例:

如您所见,在 GetRSS 代码中,我正在counter使用它获得的每页总条目数进行更新,因为我的计时器滴答作响,它将计数器的值更新为标签,以便我可以看到进度。

由此,我注意到这些任务并没有同时工作,但实际上它们是一个一个地工作,因为计数器只更新 X 数量,这相当于运行一个函数。

所以从那里我相信上面的代码实际上并没有并行运行任务,但它们似乎是按顺序运行的。

  • 是对的吗 ?

  • 如果是这样,我如何转换我的代码以便它实际并行运行?

0 投票
2 回答
201 浏览

c# - TaskFactory 错过正在运行的任务

如果已经有太多任务排队,TaskFactory 是否有可能长时间不运行任务?如果是这样,有一种方法可以配置 taskfactory 以便它能够更快地运行更多任务。

此外,在同一进程中同时使用 TaskFactory 和 Threadpool.QueueUserWorkItem 会有任何问题吗?我们有一些仍然使用 Threadpool 类的旧库。

0 投票
1 回答
2635 浏览

c# - System.Threading.ThreadAbortException 在新线程中触发

我目前在.net c# 4.0 中工作,并且遇到了一些我编写的代码的问题,这让我有些头疼。

我使用 System.Threading.Tasks.TaskFactory 类和 System.Threading.Tasks.TaskScheduler 在我的控制台应用程序中启动一个新线程,其中线程的功能是检查是否已将项目添加到队列中。当一个项目被添加到队列中时,它会处理它。

因此队列包含要发送的电子邮件,一旦将电子邮件添加到队列中,该电子邮件就会通过多个客户端发送。发送到每个是并行完成的。

我有这个间歇性问题,有时在新线程中会出现以下异常:

[System.Threading.ThreadAbortException] = {无法评估表达式,因为代码已优化或本机框架位于调用堆栈顶部。}

调试时,我无法获得任何进一步的信息,因为堆栈中的所有属性都有“无法评估表达式,因为代码已优化或本机框架位于调用堆栈顶部。”

在互联网上寻找解决方案,我发现这是在执行 response.redirect 时出现的问题,但我没有在我的代码中这样做。如果我尝试调试,则对于此错误发生的位置没有一致性。以下是我用来创建工厂并启动新线程的代码:

有没有人知道我为什么会收到这个错误以及如何修复它的任何提示?