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

multithreading - TPL 嵌套任务还是 ContinueWith()?把WhenAll放在哪里?

业务逻辑流程图

嵌套任务还是 ContinueWith()?在哪里放置WhenAll()

我是 TPL 的新手,我想要一些有关如何以正确方式完成此任务的指导。我已经用这些资源阅读了 TPL 库,但我仍然不清楚最好的方法:

最终结果是向第三方 API 提交超过 50 万条记录。尝试一步完成会导致超时和其他随机错误。

这是当前的逻辑,它只是部分成功。

  • AssignGroupNumbers为表中的每条记录分配一个组号。这导致每条记录被分配到 n 个组中的一个,最多 50 个左右。最初的想法是在一个新线程上处理这些组中的每一个,因此 GroupCount 是用户定义的,允许我们尝试不同数量的线程。对于 TPL,这可能不是必需的。

  • ProcessSourceData读取特定组的记录并调用ProcessOneGroup

  • ProcessOneGroup创建每个组中记录的小型 XML 文档(大约 100 条左右)。这也是一个用户定义的数字以允许进行实验。ProcessOneGroup然后调用SubmitToNLS传入 XML 字符串。

SubmitToNLS是返回成功或失败状态的第三方 API。

该图显示了我如何将其分解为任务,所以我的问题是:

  • 如何在不阻塞 UI 的情况下完成此操作。我已经尝试过 [Task.Run( --> Parallel.ForEach] ,但我如何跟进后续任务?

  • 在这种情况下,提供进度条、错误处理和用户取消的最佳方式是什么?

我希望图表和叙述能提供足够的信息。我已经尝试了几种方法,但目前没有一个像样的代码示例。

更新:经过大量阅读和反复试验,我编写了这段代码,似乎可以完成这项工作。它不是 DataFlow,但我打算在我的下一个项目中使用它。你看到这段代码有什么明显的问题吗?特别是关于异常处理和更新 UI?

0 投票
1 回答
1143 浏览

c# - 将任务转换为任务(包装任务,返回类型为 T)

我已经阅读了这个问题,但在我的情况下它更简单,因为我不必使用Result属性。所以我想知道我是否可以采用比斯蒂芬·克利里的回答提供的更简单的方法。

假设我有这个简单的界面。

该接口提供了异步加载对象的方法。它不返回任何内容,因为加载结果是对象本身。

(接口是内部的,因此显式实现以避免暴露实现。)

这是我加载二进制数据的方式。

我想让这个更流畅和详细,所以我写了这个扩展方法

现在加载变成了这样。

这里有什么我应该担心使用这种方法的吗?例如异常处理等?

0 投票
1 回答
1731 浏览

c# - C# Chained ContinueWith 不等待上一个任务完成

我正在测试 C# async/await 的异步性,并意外地发现 ContinueWith 的后续代码不等待前一个任务完成:

使用以下测试方法执行:

输出显示运行 0.0、1.0 和 2.0 的执行正确地异步执行,但随后的 x.1 和 x.2 几乎立即开始,并且 x.2 实际上在 x.1 之前完成。例如如下所示:

似乎 continueWith 只会等待第一个任务(0),而不管后续链如何。我可以通过将第二个 ContinueWith 嵌套在第一个 Continuewith 块中来解决这个问题。

我的代码有问题吗?我假设 Console.WriteLine 尊重 FIFO。

0 投票
1 回答
2246 浏览

vb.net - VB.net ContinueWith

我有这段代码循环遍历列表中的所有帐户,然后使用每个帐户的任务对帐户执行某些操作,以加快流程。每次程序完成这个动作,我希望用户界面更新进度条。我以前使用过 Invoke,但它不是最好的选择,我无法让它工作。现在我知道这可以使用后台工作人员来完成,但这不是使您的应用程序多线程的最佳方式,所以我使用了这个。而不是调用我听说 ContinueWith 但我似乎无法让它工作,我没有收到错误消息,只是一个红色下划线。代码:

我没有得到如下所示的错误代码: 在此处输入图像描述

我也尝试过在这些东西之后放一个子,但这没有任何结果。感谢您提前提供任何帮助。

使用调用尝试更新:

仍然不工作不知道为什么?

0 投票
1 回答
2115 浏览

c# - 在等待的任务上使用 ContinueWith() 并在里面调用 Task.Result

我遇到了以下代码,它使用 ContinueWith() 来等待结果。

是否ContinueWith()阻塞调用线程直到任务从GetUserAsync()调用返回?

由于在task.Result计划的 ContinueWith() 内,在等待前件时是否有任何阻塞task

我在其他几个地方看到过这种类型的代码,这是否被认为是异步/等待模式的最佳实践?我希望GetUserAsync()调用返回结果而不是使用 aContinueWith()等待它。

0 投票
2 回答
924 浏览

c# - Async Await and ContinueWith 未按预期工作

我有以下在 .NET Standard 2.0 上运行的代码:

我们注意到它没有按预期运行。我们认为,当您等待调用 TryRun 时,它总是会调用可以处理异常/取消并返回作业结果的延续。我们希望减少创建的异步状态机的数量......但是,情况并非如此,它只是爆炸了。这是一个较小的示例(创建一个新的 .net core 2.0 控制台应用程序并粘贴以下内容:

您可能需要<LangVersion>Latest</LangVersion>在您的 csproj 中。

更新

我们最终使用了以下代码:

0 投票
2 回答
1338 浏览

c# - 为什么使用 ContinueWith 执行任务时 Windows 窗体 UI 被阻止?

我花了几天时间在 Google 中搜索并试图了解为什么在我的情况下 Windows Forms UI在Tasks中执行 ping 时被阻止。我看到很多类似的案例,但没有一个能解释我的具体案例。

问题描述:

我有一个异步发送 ping 的应用程序。每个 ping 都在任务内部发送。我.ContinueWith用来接收 ping 的结果并将其打印到文本框而不阻塞 UI 线程。如果我启动所有 ping 一次,它工作正常。如果我添加一个while {run}循环以使它们永远运行,我的 UI 将变得无响应并被阻止,并且没有任何结果打印到文本框。

有问题的代码:

问题:

  1. 为什么 UI 会被while循环阻塞,为什么没有循环不会阻塞?
  2. 如何修改我的代码以仍然能够在不阻塞 UI 的情况下使用 Tasks 进行 ping?
  3. 有没有更好的方法可以同时向多个 IP 地址发起无休止的 ping 操作?

完整代码:

0 投票
1 回答
284 浏览

c# - Is there a way to use TaskContinuationOptions like a finally

Is there a way to use TaskContinuationOptions like a finally?

Here is my code

Here is my question

I wanted to use last ContinueWith like a finally. So, I changed my last ContinueWith phrase like this

I thought it be used when the last task is complete or fault.

But It throws a error.

I hope there is a good way to solve my problem.

thank you for reading my question.

0 投票
1 回答
47 浏览

c# - 继续更改我的列表顺序

我有一个信息列表这些信息中的每一个都必须在用户控件中,创建用户控件需要很长时间并且用户界面挂起所以我使用Task.Delay.ContinuWith ()(为了在添加任何项目后更新用户界面)
但是有是个问题,信息没有按顺序显示

输出是:

身份证 | 姓名 |

10 | 阿里
9 | 哈迪
1 | 哈桑
15 | kajsd
...
但是应该收到如下信息

身份证 | 姓名 |

1 | 哈桑
2 | 广告
2 | 广告
3 | 广告
...

0 投票
1 回答
49 浏览

c# - Task中的异常属性什么时候可以有值?

我想知道“continueWhith”何时有异常。

我做了一个这样的代码。

我预计最后 continueWith 任务中会有异常,但事实并非如此。

任务中最后没有异常是对的吗?

我想知道如何在 continueWith 中设置异常属性。

谢谢你。