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

c# - 页面加载中的 TaskFactory.StartNew

在我的 Web 应用程序中,我有一个仅用于显示目的的页面。验证数据后,用户可以下载报告,大约需要2-3分钟的时间。我需要减少这个时间。所以,我想一旦页面被调用就开始生成报告,以共享时间,而不影响页面加载。我尝试通过Task.Factory.StartNew()在我的页面加载中使用同时执行报告生成方法。问题是,我能够按预期执行该方法。但是,它仅在报告生成完成时才显示页面,即使页面加载事件已经结束。是否可以在页面加载完成后强制显示页面,然后继续后面的报告生成过程?这是我的代码,

0 投票
3 回答
1196 浏览

c# - 主线程在任务线程完成之前终止

嗨,我需要你的帮助,伙计们,

我在我的主要方法中声明了新任务,如下所示:

我的问题是,主线程在我的任务完成其操作之前终止。在终止主线程之前,我应该如何等待 Task 完成其操作?

0 投票
1 回答
39 浏览

wpf - 我们可以在任务工厂中使用 Outlook 对象模型吗?

嗨,我们有一个前景插件。我们在代码中使用了任务工厂和后台工作者。我们在 UI 设计中使用了 WPF。我们看到一些关于 Outlook 崩溃和 Outlook 禁用插件的问题。插件可以进入禁用模式的原因是什么?

0 投票
0 回答
314 浏览

c# - TPL 中未释放内存

我正在开发一个报表生成 Windows 服务,它基本上会从 DB 中获取数据,在内存中创建 excel,然后将 excel 保存byte[]在 DB 中。为了加快速度,我决定使用 TPL,下面是我编写的一些代码。

GenerateReport()方法将从数据库中获取每个报告的数据并创建 excel 并将其保存byte[]在数据库中。所以基本上这是耗时和内存密集型操作。

问题

我的问题是,每当我在服务器中看到任务管理器时,该进程似乎永远不会释放使用的内存。有时当一个任务完成时(我假设它在标志被更新为在 DB 中处理时完成)并且另一个正在等待从 DB 中获取数据,任务管理器中使用的内存保持不变并且随着第二个任务开始处理使用的内存不断增长。

我期待 TPL 会在完成后自动Dispose()执行任务,并且 GC 会释放内存。但是内存继续被使用,最终我得到内存异常。

我错过了什么或做错了什么?我很难发布生成报告方法的整个代码,但如果需要,我会尝试发布其中的一些。

0 投票
1 回答
801 浏览

c# - 未立即调用 Task.Factory.StartNew 中的方法(操作)调用

我的印象是我可以进行这个线程调用,而我的方法“DoSomething”中的任何内容都会开始发生,但显然不会。

当我调用这一行时:

ControllerClass.DoSomething("data") 未执行。

但是,如果我添加一个等待,那么该方法就会被调用。

我使用 LongRunning 选项的原因是该方法可以是 LongRunning 在某些事情开始执行时没有到位。是的,该方法本身在内联调用时有效。只是它需要在一个线程中,以便主程序可以在该线程执行其操作时继续。

顺便说一句,我也尝试过这种方式来调用它并且结果相同:

我是否缺少一些选项来告诉它立即开始执行方法调用?

0 投票
0 回答
123 浏览

c# - Task.Factory.StartNew 重复问题

下面的代码在我期望 13、14、15、16 时生成 14、15、16、16 的事件日志,即无论顺序如何,每个数字都将写入事件日志一次。

问题是为什么它缺少 13 和重复 16?

0 投票
2 回答
1058 浏览

c# - 任务冻结 GUI

我正在尝试创建一个函数来从多个页面获取源代码。抓取每一页后,我想更新表单上的标签,指示进度(5 个中的 1 个、5 个中的 2 个等)。

但是,无论我尝试什么,GUI 都会完全冻结,直到for循环结束。

对该方法的调用如下所示:

如果我删除task.Wait();GUI 解冻,标签会正确更新,但代码会在没有所需的多维列表的情况下继续。

我应该说我对 C# 很陌生。我到底做错了什么?

更新

根据达林,我改变了我的方法:

和电话:

但是,现在我收到此错误:

'await' 运算符只能在异步方法中使用。考虑使用“异步”修饰符标记此方法并将其返回类型更改为“任务”。

但是当我用异步标记方法时,GUI 仍然冻结。

更新 2

哎呀!我似乎错过了一段达林的新方法。我现在已经包含await webGet.LoadAsync(url + i);在方法中。我还将我从中调用的方法标记为async.

现在,不幸的是,我收到了这个错误:

“HtmlWeb”不包含“LoadAsync”的定义,并且找不到接受“HtmlWeb”类型的第一个参数的扩展方法“LoadAsync”(您是否缺少 using 指令或程序集引用?)

我检查过,我使用的是 .NET 4.5.2,我的参考资料中的 HtmlAgilityPack 是 Net45 版本。我不知道现在发生了什么。

0 投票
0 回答
65 浏览

c# - 如何使用 Windows Store 应用程序从 Azure Marketplace 读取数据固定查询?

我有这个代码来调用服务,我收到以下错误。

此目标框架不允许您直接枚举数据服务查询。这是因为枚举会自动向数据服务发送同步请求。因为该框架只支持异步操作,所以必须改为调用 BeginExecute 和 EndExecute 方法来获取支持枚举的查询结果。

所以我找到了解释如何正确调用它的代码,所以我在这里添加了这段代码

但现在在最后一行我得到无效参数。

任何想法 ?或者使用 Windows Store App 调用 Azure Marketplace 固定查询的工作示例?

0 投票
2 回答
1114 浏览

c# - 如何确保 Task.Factory.StartNew 不会减慢主线程?

有一堆压缩数据块必须被异步压缩- 不会阻塞或减慢任何形状或形式的主线程。

解压缩后的块将在解压缩后立即被主线程使用。

目前我这样做:

问题是这似乎劫持了运行主线程的核心,这会破坏性能。

有没有办法让TaskFactory每个核心线程和上下文仅在主线程被阻塞的那些短暂时刻从主线程切换?

编辑:foreach 循环并不是代码中唯一变慢的部分,只要有大量的解压任务运行,主线程就会显着减慢

EDIT2:要解压的新数据一直到达,循环不会只运行一次:

  • 假设您有 250 件物品compressedChunkData首先到达
  • 下一帧你有 10 个项目,接下来是 12 个,接下来是 0 个,接下来是 2 个,等等。
0 投票
2 回答
326 浏览

c# - TaskFactory 内部任务永远不会被执行并且总是处于 WaitingForActivation 状态

我正在使用 TaskFactory 使用以下代码开始新任务。

doAPICall() 的代码如下所示,它调用了一个返回任务的外部 API。

问题出现在 doAPICall() 函数中,任务“响应”状态永远不会更改为 RanToCompletion,并且始终处于 WaitingForActivation 状态。我已经尝试增加等待超时但仍然没有运气。我正在使用 TaskFactory 而不是 Task,因为将来我想创建自定义 TaskFactory 以更好地控制调度程序和并发性。

这是我的代码中缺少的东西,内部任务永远不会被执行吗?

编辑 我根据删除不必要线程的评论修改了调用 doAPICall() 的代码,但仍然没有运气。:-(