问题标签 [continuewith]

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 回答
729 浏览

c# - ContinueWith 不会捕获异常?

使用 Visual Studio 2015,以 FW 4 为目标(在 FW 4 下测试不可观察的异常):

在此处输入图像描述

我期待这个代码:

向我展示例外情况。

我知道我可以通过T.Wait()或在最后一个任务中看到它t.Exception- 但为什么我在这里没有看到异常?

我知道异常处理机制在 4.5 中发生了变化,为了获得旧机制,我应该添加:

我做了什么:

但结果仍然是:

在此处输入图像描述

问题:

为什么我没有看到异常?

值得一提的是,我确实在调试模式下看到了异常:

在此处输入图像描述

0 投票
3 回答
83 浏览

c# - 如何捕获已在任务的 ContinueWith 部分中引发的异常?

在一个button_click事件中,我开始Task异步进行一些耗时的计算。我使用Task.ContinueWithTaskSheduler 并将其设置为延续到 UI 同步上下文,以在Textbox.

现在让我们说最后一部分抛出一个异常,如下所示:

如果我启用调试选项“仅启用我的代码”,则程序会停止并收到警告:“用户代码未处理异常”

但是如果我不设置这个选项,异常就会消失在任何地方(没有程序崩溃,什么都没有)。

那么如何/在哪里可以处理这个异常?

编辑:请注意,正如标签所示,我使用的是 .NET-4.0

0 投票
1 回答
481 浏览

c# - C# Tasks.ContinueWith

我试图从异步方法执行两个不同的任务,但我的第二个任务只应该从第一个结束的地方开始。我尝试使用 ContinueWith 但没有成功。这是我的示例代码:

您可能会通过控制台输出注意到任务保持同时运行。是否有可能改变这种行为?

0 投票
2 回答
340 浏览

c# - 使用 TPL 以使用 continueWith 子句按顺序执行操作

首先,我将解释我要做什么。

我有一个组件 A正在使用组件 B

为了在它们之间进行通信,我需要使用 event.

我的先决条件之一是让组件 B异步运行并按它们被调用的顺序运行事件处理程序。

此外,我想取消呼叫管道(当用户询问时)。因此,所有尚未执行的事件处理程序都将永远不会执行。

实现上的解决方案是TPL。我对我正在尝试做的事情做了一个 POC:

有这个片段的输出:

1

结束

2

如您所见,它在它真正完成之前完成。它在Finish之后显示2

如果我通过这个修改以前的代码,它可以工作:

有这个片段的输出:

1

2

结束

如您所知,我不需要在任务声明中使用 continueWith 语句,而是在引发事件时使用。

为什么 Task.WaitAll(t); 第一个样品不起作用吗?

有人可以帮助我吗?

0 投票
1 回答
977 浏览

c# - 如何在此示例中使用 ContinueWith

我有以下异步方法,它应该根据传递给方法的列表获取我需要的所有字符串:

任务完成后,此方法的调用者将如何使用 Task.ContinueWith() 处理返回的 List?我想做这样的事情:

0 投票
1 回答
1300 浏览

c# - C#:如何在 task.continuewith 中捕获取消异常

我尝试了很多方法,但未能在 task.ContinueWith 中捕获取消异常。这里有什么问题吗:

输出是:

取消:

这意味着捕获了取消异常,但异常本身为空。我的问题是如何在这里获得取消例外?

谢谢

德里克

0 投票
1 回答
651 浏览

c# - C# 中实体框架数据库处理方法的异步等待和继续

我有一种Save添加/更新联系人的方法。我设计了一个异步方法。但我无法从数据库中获取记录。

请看一下代码:

在上面的代码中,它总是返回 NULL

请帮助我任何人满足要求。

注意:上述方法在库中。请帮助我如何使用异步使用此方法。

0 投票
1 回答
72 浏览

c# - 等待由 ContinueWith 链接产生的任务

我正在使用 ContinueWith 链接任务并等待它们。当我在循环中引入延迟时(评论 - 这意味着有足够的时间完成任务),我可以看到所有任务都已完成。当我消除延迟时,我可以看到只处理了第一条消息。不处理剩余的消息。我假设代码在完成所有任务之前退出方法。不确定我是否在等待错误。

如何确保完成所有任务而不会在循环中引入延迟?

0 投票
1 回答
41 浏览

c# - 在没有任务对象的情况下等待所有任务线程

我有一个应用程序使用.NET 4.0(所以没有async/await可用)。我正在为使用服务调用的方法编写测试。

例如,我的测试调用method A. 有一个返回 aMethod A的异步服务调用,我们在. 什么都不返回。method BTaskContinueWithMethod A

问题是主线程在有机会完成Assert之前到达调用,因此测试失败。ContinueWith

目前解决这个问题的方法是这样做Thread.Sleep(10),以便ContinueWith有时间执行。然而,这带来了很多问题,例如浪费时间(当有数百次 - 数千次测试时会加起来)在较慢的机器上测试失败。

我想知道是否有任何方法可以在Thread.WaitAll()没有实际拥有Task对象的情况下进行某种操作,因为无法获得它们。更改代码不是一种选择,因此必须从测试中完成。

注意:如果我们有Task/Thread对象,我知道执行此操作的方法,但我无权访问它们,因此请不要将其标记为与那些重复的对象,因为它不是。

0 投票
1 回答
59 浏览

c# - 使用 ContinueWiths 链更新 UI

我尝试使用多个 ContinueWiths 来更新 UI。所以我希望每个 ContinueWith Task 都会单独更新 UI,但真正发生的情况是,它们会互相等待并立即更新 UI。因此,即使您每个 ContinueWith 都按时运行,但 UI 仅在最后一个完成时更新。

Thread.Sleep 表示此上下文中的工作。

答案:StartNew is Dangerous by Stephen Cleary。博客文章的最后一部分几乎使用了与我相同的示例。

我编辑了帖子,回答了我自己的问题,〜并排。

编辑:在 Test1() StartNew 将在线程池上运行,因为没有任何特定的 TaskScheduler 集。所以“工作”将在线程池上运行,但“更多工作”和“停止”将在 GUI 线程上运行,因为有一个设置的上下文。

经验:

编辑:但是,如果“工作”在线程池上运行,为什么结果会有延迟?因为我错了。当我第二次或第 n 次运行测试应用程序时,您在下面看到的只是真实的。

如果你运行它,会发生以下情况:

如果我第一次运行调试,它看起来像这样:

编辑:我想,如果我第一次运行 Test1(),'Work' 真的在线程池上运行。但是第二次 TaskScheduler.FromCurrentSynchronizationContext() 也将适用于“工作”,因此它将在 GUI 线程上运行。那些 Thread.Sleeps 真正在 GUI 线程上运行,我无法移动表单。

所以我的第一个问题是,为什么 UI 没有单独更新?因为这是我所期望的。

如果我从每个 ContinueWith 开始一个单独的任务,我会得到所需的结果(单独的 UI 更新),但这看起来是错误的/丑陋的/复杂的,我感觉我没有正确使用 ContinueWith(用于 UI 更新)。

编辑:这个工作的原因是,因为我没有使用 ContinueWiths 的“上下文”,所以它们将在线程池上运行,而不是锁定 UI。新创建的任务将在 UI 上运行,因为这是它们设置的上下文。

结果:

编辑:tl;博士:小心 StartNew 和 TaskScheduler.FromCurrentSynchronizationContext();