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

c# - 使用线程池进行多线程

我有以下代码:

该方法CropAndSaveTile需要一段时间,所以我想使用线程池将该任务拆分到一个新线程。我尝试使用Task.Factory.StartNew. 问题是我需要将这 4 个参数传递给线程,所以我必须创建一个可以强制转换为对象的类。

这几乎可以工作。问题是new Bitmap(info.Image)抛出一个ArgumentException(参数无效)。我已经对此进行了测试,但没有使用Task.Factory.StartNew,而是直接使用调用该方法CropAndSaveTile(new CropInfo(resized, x, y, level));,它工作正常。和之间发生了一些事情 StartNew,线程运行。这可能是由何时SplitTilesRecursive结束循环并被resized处理掉的同步问题吗?如果没有,我怎样才能正确地将多个参数传递给一个线程以用作线程池的一部分?

0 投票
1 回答
3240 浏览

c# - 取消后如何启动任务

我有一个带有三个按钮的 Windows 窗体。一个按钮将条目添加到 BlockingCollection。一个开始处理列表,一个停止处理列表。

我可以将条目添加到我的 BlockingCollection 中,当我单击 Start 时,列表会按照我的预期使用。我仍然可以添加新项目,并且它们会继续被消耗。但是,当我单击停止按钮时,虽然任务确实停止了,但我无法使用开始按钮再次启动它们。

我在取消任务时做错了什么,他们不会重新开始?我已经阅读了无数关于取消任务的项目,但仍然没有“明白”。

任何帮助都会很棒。这是代码...

0 投票
3 回答
6091 浏览

c# - Task.Run 和 Task.Factory.StartNew 之间的不同异常处理

我在使用Task.Factory.StartNew并尝试捕获exception抛出的问题时遇到了问题。在我的应用程序中,我有一个长时间运行的任务,我想将它封装在一个Task.Factory.StartNew(.., TaskCreationOptions.LongRunning);

但是,当我使用Task.Factory.StartNew. 然而,当我使用它时Task.Run,它可以正常工作,我认为它只是一个包装器Task.Factory.StartNew(例如根据这篇 MSDN 文章)。

此处提供了一个工作示例,不同之处在于异常在使用时写入控制台Task.Run,但在使用时不写入Factory.StartNew

我的问题是:
如果我有一个LongRunning可能引发异常的任务,我应该如何在调用代码中处理它们?

0 投票
2 回答
3824 浏览

c# - 在 C# 中同时运行相同方法的多个实例而不会丢失数据?

我真的不太了解任务和线程。我在三个嵌套级别中有一个方法for,我想在不同的线程/任务中多次运行,但是我传递给该方法的变量发疯了,让我用一些代码解释一下:

这是巢,myMethod真的做了很多事情,比如计算一些数字的阶乘,写入不同的文档,用组合列表匹配响应以及调用其他小方法,它也有一些返回值(布尔值),但我暂时不用管他们。问题是没有任务结束,就像每次嵌套调用它自己刷新的方法一样,删除以前的实例。它还会给出一个错误,“尝试除以 0”,例如,值超过由 FOR 分隔的值,a=71, b=7, c=11并且所有变量都为空(这就是除以零的原因)。我真的不知道如何解决它。

0 投票
3 回答
1013 浏览

c# - Task.Factory.StartNew 依赖父线程?

我在 WCF 服务库的方法中运行这个线程。

下面的代码在方法结束时执行。我这样做是因为我不希望用户等待不影响从 WCF 到客户端的输出的后台进程完成。

我现在遇到的问题是,如果我执行该线程并且客户端得到响应,则父线程被杀死;也杀死这个线程。我如何使父线程等待该线程完成,同时执行其余操作?

简而言之,我希望此方法启动该线程并继续返回值 X,但仍等待该线程在它返回值后完成。

0 投票
1 回答
1382 浏览

.net - Task.Factory.StartNew - 使用 .Wait() 继续

我正在使用 TaskFactory 声明一个任务,我有一个严重的疑问。

我正在创建一个在创建时声明 continueWith 的任务,我没有将它分配给稍后将开始的第二个任务。

声明是这样的:

如你看到的。此任务声明为:

TaskContinuationOptions.OnlyOnFaulted

任务被执行,然后我的下一行代码是:

问题是:

如果我的任务退出失败并且我使用了.Wait(). ContinueWith Action 会在代码继续执行之前启动吗?还是会排队并稍后开始?

如果晚点开始,多长时间或少多长时间?这样做可以使 myThrow Exception超出范围。

我知道我可以做类似的事情:

我想知道 TaskFactory continueWith 队列是如何工作的。

0 投票
1 回答
8290 浏览

c# - 使用任务工厂和回调创建异步方法

我开始创建一些将触发异步操作的类,并且我希望客户端注册一个回调以接收一些结果。最后我达到了以下代码。这只是一个例子,我想知道是否有更好的方法来使用TaskFactoryAction<>, Func<>

这是客户端的基本示例:

这是客户端类GetCLientList异步示例:

有没有更好的方法呢?我知道我可以Task从我的函数返回并continueWith在客户端注册,但我想将它包装在类中。

编辑

我正在发布另一个示例。我试图制作sync/async版本的webrequest. 这种方法正确吗?:

0 投票
2 回答
3391 浏览

c# - 使TaskScheduler同步运行在主线程中

我正在寻找一种方法来创建在主线程中同步运行的 TaskScheduler,以允许将 WPF 应用程序配置为单线程以进行调试。

任何想法?

现在我正在使用 MSDN 上的示例LimitedTaskScheduler,它允许指定并发级别(使用多少个线程)和这个扩展来在应用程序启动之前设置静态 TaskFactory:

0 投票
0 回答
89 浏览

vb.net - 处理 taskfactory 任务取消

我正在尝试对使用 .net 中的 taskfactory(并行任务)库创建的任务进行一些控制。我的调用者进程创建了两个任务,它们运行可从两个不同引用库访问的两种不同方法。

另一个也一样。我发现任务仍在运行,在我单击按钮后,我认为任务会进行检查 IsCancellationRequested,然后在取消之前执行 if then 语句中的方法。这使我可以单独控制任务流程中的任务。

0 投票
1 回答
141 浏览

c# - 任务调度和 WaitHandles

我试图让多个任务消耗来自并发集合的对象,但仅在特定资源可用时。

为了表明此资源的可用性,我使用了 ManualResetEvent,我的任务主体如下所示:

但是,我注意到,从锁定解锁的那一刻到重新安排任务的那一刻,我可能有几百毫秒的时间可以重新启动任务而它们不是,可能是因为它们根本没有被安排。

我正在使用 TaskFactory 启动任务,我该如何改善这种行为?有没有更好的策略在资源不可用时暂停任务?