问题标签 [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 回答
613 浏览

c# - TaskFactory 处理异常

如何在不阻塞 UI 线程的情况下轻松处理正在运行的任务中发生的所有异常。

我发现了很多不同的解决方案,但它们都涉及wait()功能,这会阻塞整个程序。

该任务正在异步运行,因此它应该只向 UI 线程发送一条消息,说明它有一个异常,以便 UI 线程可以处理它。(也许是我可以关注的事件?)

这是我现在拥有的阻止 UI 线程的代码:

0 投票
2 回答
10894 浏览

c# - 使用操作创建任务多个参数

我想在包含 Action 的任务中添加多个参数。我查看了现有的堆栈溢出问题Create a Task with an Action<T>

请帮助我如何在 Task 的 Action 方法中传递多个参数

行动方法是

请帮助我如何创建异步方法的操作以及如何将操作添加到任务中。

0 投票
3 回答
92 浏览

c# - 在 C# 编程中使用任务启动新线程

目前我正在开发一个使用 C# 开发的应用程序。我有一个关于任务的问题。我已经完成了关于任务和异步编程主题的研究。但是我在处理任务时仍然没有完全自信。

此应用程序有一个方法,即 ReadOrWriteDBTable。此方法每秒对 SQL 表执行一次读取或插入操作。基本上这个方法会每秒被调用一次。目前,此方法与应用程序的 GUI 线程在同一线程上运行。刚开始这不是问题,因为表中的数据会非常少,但是随着表中数据量的增加,它会在 GUI 上带来很多问题。因此,我想在与 GUI 线程不同的线程中执行这些数据库操作。

这意味着,每秒钟都应该通过一个新线程调用方法 ReadOrWriteDBTable。这带来了多线程,我相信管理线程池变得很困难。我从 TASKS 了解到的是,多线程的所有复杂操作都完全由一个 TASK 处理。所以我通过以下方式处理了上面的Tasks多线程问题。

PollingTrigger 属性每秒调用一次,然后为方法 ReadOrWriteDBTable() 创建一个新任务。因为我不需要从任务中返回结果,所以我不使用 Async 和 await 任务的关键字,也不希望执行任何异步操作。我想知道,Tasks 的这种用法是否正确且不受异常影响?每当为属性 PollingTrigger 设置一个新值(每秒在此应用程序中)时,这是否会帮助我启动一个新线程?

我很抱歉这么详细的解释。我只是想把我的问题说清楚。我希望这很清楚。期待您的提示或答案!

0 投票
2 回答
229 浏览

c# - 使用任务时防止冻结 UI 线程和 async/await 或 ContinueWith 不正确?

我有一个方法叫它Do()做一些计算,然后将结果保存在 2 个不同的文件中,然后做一些其他的计算。由于文件可能很大,我想通过使用任务或类似的东西来更新文件,以防止 UI 冻结。我尝试使用TaskFactoryandWaitWaitAll他们冻结了 UI。另一种选择是ContinueWith,但后面有很多代码我无法将它们向上移动,而且我认为将它们全部移动不是ContinueWith正确的做法。使用起来很容易,async/await但我必须使用 .NetFramework4 所以我不能使用它们。我考虑的其他选择是调用一个方法并创建一个backgroundworker,在其中更新文件并在Runworkercompleted event调用一个方法来做剩余。但它更丑陋。有没有更好的方法可以在方法中间的单独线程/任务中做某事而不影响其他代码和 UI 线程?这就像在单独的线程/任务中执行所有方法一样,并且在不冻结 UI 的情况下完全完成之前不要离开它。

注意:我必须使用 .NetFrameWork4。

方法Do是:

0 投票
3 回答
655 浏览

c# - 递归调用函数使用的线程安全计数器

在使用名为GlobalID我用作计数器的全局整数时,以下代码可以正常工作:

GlobalID每次调用该函数时,我基本上都将其用作递增计数器。计数器在第一次执行时被分配一个起始位置。我正在使用全局变量,因为我想确保每次传递的 ID 都准确增加,而不管执行进入或离开递归调用。从分配全局变量起始位置的 ForEach 循环调用此函数(第一次....)

我的目标是使用 Parallel.ForEach 进行初始调用,而不是常规的 For Each 循环。我的问题与柜台有关。我不知道如何在多个线程中管理该计数器。如果我将它作为变量传递给函数,我相信我会有一个不准确的较低/使用的数字离开递归循环。全局变量确保下一个数字高于前一个数字。这thisClass.IsPropertyValueAboveZero只是基于条件语句描述动作的任意方式。它对其余代码没有有意义的引用。

如果我有多个线程的计数器的起始位置不同,我该如何确保这个线程安全?我目前看到的唯一方法是手动编写同一函数和计数器的多个版本并使用TaskFactory

0 投票
1 回答
514 浏览

c# - WPF 从异步任务更新 ObservableList 引发 XamlParseException

当我尝试从单独的线程然后是 ui 线程更新我在 XAML 中使用的 ObservableCollection 时,我得到一个 XamlParseException,它表示必须在与 DependencyObject 相同的线程上创建 DependencySource。我正在使用 Caliurn Micro 将 ViewModel 绑定到视图。

我尝试了几种方法来达到我的目标,下面的方法对我来说似乎是最合理的方法。我将 SyncronizationContext 从 UI 传递给任务,以便它可以在完成繁重的工作后更新 ui。

我究竟做错了什么?

看法

视图模型

编辑

我尝试了 Shadrix 的方法,但不幸的是它也不起作用。我还尝试了 Peter Dunihos标记重复的答案,但我也没有成功(我得到了与上面描述的相同的 XamlParseException)。

我尝试的最后一件事是 CM 在OnUIThread方法中的构建,它基本上包装了 Dispatcher.CurrentDispatcher。显然(考虑到我最近两次失败的尝试),它也失败了。当前的实现如下所示(我删除了其他不相关的属性和方法):

我无法解决这个问题让我发疯,所以如果有人愿意帮助一个年轻的小辈,我会非常感激。:)

您可以在此处找到完整的源代码。

谢谢你们!

0 投票
0 回答
72 浏览

c# - C# taskfactory 使用参数开始新的

我尝试使用带有代码的任务:

但在 textBox 我得到类似的东西: 10 10 10 10 10 10 10 3 3 2

有时只有 10 岁或其他

我不明白为什么...(在我看来应该是 1 2 3 4 5 6 7 8 9 - 不是按顺序...)

0 投票
1 回答
951 浏览

c# - 如何使用 TaskFactory.StartNew> 使用异步方法?

我有一个 async Func<> 我“等待”异步方法。我想使用 TaskFactory.StartNew 对该 Func<> 进行大量并行调用,如下面的代码,但出现以下错误:

错误转换'System.Threading.Tasks.Task<System.Threading.Tasks.Task<Result>>''System.Threading.Tasks.Task<Result>'

如何并行调用异步方法?

0 投票
1 回答
50 浏览

c# - 如何在屏幕上运行计时器时运行方法?

首先,这是一项家庭作业。我应该超越我们所学的,所以我想到了一个 WPM 控制台应用程序。我在Timers上进行了很多搜索,但这对于第一学期来说太过分了。所以我找到了一个更简单的方法。问题是,我希望能够调用一些字符串并让用户输入它们,最后运行计算以确定他们每分钟的话。我读到使用 Task.Factory.StartNew 应该让我运行两种方法。

当我运行程序时,计时器开始一秒钟,然后立即被字符串替换。我是否错误地使用了 Task.Factory.StartNew?

0 投票
1 回答
78 浏览

c# - C# TaskFactory 未完成所有迭代

我在使用 TaskFactory 时遇到了一些奇怪的问题:

这给出了类似于以下内容的输出:

0 0 0 0 4 5 0 0 0 0 10 0 12 13 14 ... 0 99

我不明白为什么不是所有指数都不为零。

谢谢,