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

c# - Web Api 方法返回任务的缺点

为什么Task<T>在 Visual Studio 中创建新的 Web Api 控制器时,从 Web Api 方法返回 a 的做法不是默认方法和方法?

这样做有什么缺点吗?

0 投票
0 回答
128 浏览

vb.net - Windows 服务和任务工厂

我有开发 Windows 服务的经验,其中不同的方法在不同的时间间隔上执行,每种方法使用不同的计时器。然而,我最近遇到了一个使用 System.Threading.Tasks 和 ManualResetEvent 做同样事情的 Windows 服务。我对这些了解不多。以下是演示如何创建 Windows 服务的代码。我只包括了 onstart 和执行的方法。我签入了控制台应用程序,并且任务没有因为 waitone 而被阻止。但正如我所说,我对任务没有太多的技术知识,所以我需要一些意见,对于在不同时间间隔执行不同方法的窗口服务,以下方法是正确还是错误。

0 投票
1 回答
545 浏览

c# - Task.Factory.StartNew 需要 lambda / Action?

我刚刚修复了一些生产代码,但没有按预期工作。我们正在讨论用 C# 编写的 .NET 4.5.1 中的 Windows 服务。虽然它是固定的,但我试图了解发生了什么。一些谷歌搜索并没有显示出太多的结果。正在启动一个任务,如下所示:

据我所知,就像在 Threads 中一样,StartNew 接收到它应该执行的方法的引用。好吧,这在调试环境中有效,但在生产环境中不起作用(发布)。以下做了:

我在这里想念什么?代码是否以根本不执行的方式进行了优化?

根据要求,任务方法的主体:

到目前为止,没有记录任何异常并且服务正在运行。使用 Task.Factory.StartNew(this.SendReminders) 行在生产中没有触发,但使用 lambda 就像一个魅力。

我正在使用 SimpleInjector 并且 UnitOfWork 由 Entity Framework 6.0.2 支持。启动任务的方法由主线程上的 Timer 触发。

0 投票
1 回答
105 浏览

c# - 并行处理不相似项目的任务工厂

有一堆项目不断添加到数据库中,需要处理。我希望并行处理不相似的项目。

例如:

A 类物品:第 1 项、第 2 项、第 3 项

B 类项目:第 4 项、第 5 项、第 6 项

C 类项目:第 7 项、第 8 项、第 9 项

第 1 项、第 4 项和第 7 项应并行处理。

随着越来越多的某个类型的项目被添加到数据库中,它们将被选中并排队等待处理,只有在处理完该类型的先前项目之后。

我想我可以使用带有 CustomTaskScheduler 的静态任务工厂来做到这一点,它只会在该类型的上一个任务完成后才开始一个新任务?我的问题是我的 CustomTaskScheduler 应该如何看?

0 投票
1 回答
2263 浏览

c# - How do I create multiple tasks in parallel using the Taskfactory Class?

I am attempting to use the TaskFactory Class to create multiple task in parallel, one for each pending transactionId that is being processed, up to a max of 5 threads. I need to pass each task the cancelation token. Am I on the right track? How do i get it to run async vs running sync? I have the following:

0 投票
0 回答
501 浏览

c# - 为什么 Task.Factory.StartNew() 永远不会在 IIS7 下运行它的操作?

我有一个运行 .ASP.NET WebForms .NET 4.0 代码的 Windows Server 2008 R2 IIS 7 实例。在回发中,有一个运行长时间运行的进程的线程生成。

下面的代码在 IIS7 下不起作用。它在 Cassini 和我们可用的另一个 Windows Server 2003 IIS6 实例上本地运行良好。

无论服务器如何,这都会记录“无异常”和“isfaulted=false”和“iscompleted=true”。

但是,ProcessWorkItem在 IIS7 中也有一条日志语句,尽管它在 IIS6 或 Cassini 本地开发服务器上运行良好。

知道为什么会这样吗?

0 投票
2 回答
93 浏览

c# - 我应该如何共享一个大的只读列表每个 Task.Factory.StartNew() 方法

考虑我有一个名为的自定义类Terms,并且该类包含许多字符串属性。然后我创建了一个相当大(比如 50,000)的List<Terms>对象。这只List<Terms>需要读取,但需要由多个实例读取Task.Factory.StartNew(实例的数量可能从 1 到 100 不等)。

我如何最好地将该列表传递给长期运行的任务?内存不是太大的问题,因为这是在具有大量内存的特定服务器上的特定用途的自定义应用程序。我应该引用它还是应该将它作为正常参数传递给执行工作的方法?

0 投票
2 回答
1754 浏览

asp.net-mvc - 当内部方法有新参数时,Task.Factory.StartNew 不会启动

(问题已解决)我有一个 MVC 应用程序,在我的操作中:

第一种情况:任务从未开始。

第二种情况:任务正常运行

我的问题是:当我在Task.Factory.StartNew中放入一个方法时,该方法(对象)的参数必须在外面声明???因为当我像第一种情况一样写的时候,我把“new”关键字放在参数中,任务永远不会运行。原因:在行动中,我想尽快返回视图,与该视图无关的任何其他内容将在任务中执行,客户端无需等待完成。

我很抱歉我的英语不好:)

更新 1:感谢Panagiotis Kanavos,我使用了 QueueBackgroundWorkItem但问题仍然存在,如果我在外面声明对象,此方法运行正常。但是当我在参数中使用 new 关键字时,这个方法永远不会运行。没有例外,没有错误。谁能向我解释这怎么可能:(

更新 2:我尝试两种情况:

第一的:

第二:

那么问题出在哪里???这与 m_bussinessHandler 无关,因为我复制了。

更新3:我找到了原因。原因是UserModel.Current,这是一个对象HttpContext.Current.Session["UserModel"],在这种情况下,当我调用异步方法时,当该方法实际执行时,它可以访问为null的HttpContext.Current。所以我可以通过在外部声明对象来存储数据并将其传递给方法来解决这个问题,或者我捕获 UserModel.Current 并将其传递给这个方法以使用 UserModel.Current.UserId。

我的问题实际上解决了,感谢大家帮助我,尤其是Panagiotis Kanavos

0 投票
0 回答
42 浏览

c# - 在 for 循环中使用 TaskFactory StartNew 时,不能依赖循环索引值

当使用 TaskFactory 在 for 循环中启动新任务时,我将当前循环索引作为参数传递给启动任务的 lambda 函数。该索引用于从 List 中选择一个项目并为该项目调用工作函数。看来您不能依赖可靠地传递给工作任务的索引值。

如果您执行控制台输出下方的代码,则会发现一些工作人员没有启动,并且匹配数量的其他工作人员至少启动了两次。它可能看起来像这样:

这可以通过获取循环索引值的副本并将其传递给工作函数(它是在 Manager RunWorkers 函数中注释掉的位)来“治愈”,这给出了预期的结果:

我希望了解这种行为,以便我可以适当地防范它(我假设我做了一些愚蠢的事情并且“修复”只会隐藏问题并且不能依赖)

顺便说一句 - 删除 Manager RunOne 函数中的防护可能会导致 ArgumentOutOfRange 异常,因为索引太大。

我在下面包含了 C# consol 应用程序的代码(Visual Studio 2013),首先是 Worker

然后经理

最后是程序本身

0 投票
2 回答
399 浏览

c# - Is it a good practice to use TaskFactory.StartNew for every layer in push model?

Lets assume that I have a several layers:

  1. Manager that reads data from a socket
  2. Manager that subscribes to #1 and takes care about persisting the data
  3. Manager that subscribes to #2 and takes care about deserialization of the data and propagating it to typed managers that are insterested in certain event types
  4. WPF Controllers that display the data (are subscribed to #3)

As of right now I use

on each layer. The reason for this is that I don't want to rely on the fact that every manager will do his work quickly and that ex. Socket manager is not stuck.

Is this a good approach?

Edit Let's say that Socket manager receives a price update There are 10 managers subscribed to Socket manager so when Socket manager propagates the message .StartNew is called 10 times.

Managers #2,#3 do nothing else but to propagate the message by .StartNew to a single subscriber

So ultimately per 1 message from socket 30x .StartNew() is called.