问题标签 [cancellation]

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

c# - 使用任务取消长时间运行的 IO/网络操作的好方法是什么?

我一直在研究 .net 4.0 中的任务及其取消。我喜欢 TPL 尝试以合作方式正确处理取消的事实。

但是,在任务内部的调用被阻塞并且需要很长时间的情况下应该怎么做?例如 IO/网络。

显然取消写入将是危险的。但这些都是例子。

示例:我将如何取消这个?DownloadFile可能需要很长时间。

0 投票
5 回答
9804 浏览

c# - 如何取消可观察序列

我有一个非常简单IObservable<int>的,每 500 毫秒充当一个脉冲发生器:

我有一个CancellationTokenSource(用于取消同时进行的其他工作)。

如何使用取消令牌源取消我的可观察序列?

0 投票
1 回答
2261 浏览

c# - 当 CancellationTokenSource 不可用时如何取消任务?

我有一个函数,它返回一个任务来做任何事情。

我有一个自定义表单 ProgressDialog,它的构造函数需要一个 Task 来执行。此对话框显示任务的状态,但这并不重要。

该对话框有一个取消按钮。如果用户点击它,任务应该被取消,但我该怎么做呢?我只有 Task 对象,而不是 CancellationTokenSource(我可以用它取消 Task)。

为什么我不能通过任务对象本身取消任务?

0 投票
2 回答
937 浏览

c# - C# async CTP - 如何在不引发 TaskCanceledException 的情况下将异步任务标记为已取消?

我有一个简短的异步任务,它开始后经常需要取消。“任务”类有一个 IsCanceled 指示器,我认为可以方便地使用它来指示异步任务在没有运行完成的情况下被取消,但据我所知,将异步任务标记为已取消的唯一方法是在异步函数中抛出 TaskCanceledException。定期抛出异常以指示异常发生的情况,这与我对应该使用异常的理解背道而驰。有谁知道一种更好的方法来指示异步任务在预期频繁发生时被取消?

我的下一个最佳选择是返回一个具有自己的 IsCanceled 属性的结构:

(为了简洁起见,我忽略了一些好的编码和风格实践)

但这似乎多余且难以使用。更不用说它引入了一致性问题,因为会有两个 IsCanceled(一个在 Task 中,一个在 MightBeCanceled 中)。

0 投票
1 回答
785 浏览

c# - 嵌套的 Parallel.For 循环 - Cancellation.Token 不起作用

我有以下问题:我有一个紧密的循环(故意),它从我的 WPF 应用程序的 MainWindow.cs 中的单击事件开始。

现在,由另一个按钮触发的停止事件应该停止紧密循环并结束任务。

在我的紧密循环中,我有一个Parallel.For循环。想法是我必须同时做一定数量的事情(Parallel.For),并且一遍又一遍(紧密循环)。我不知道这是否是最好的方法,但它是我唯一的方法,但是它有效:)。

我对 Cancellation.Token 有问题,它似乎没有做任何事情。如何停止循环并正确结束任务。

这是我的代码:

我尝试了po.CancellationToken.IsCancellationRequested有无,它并没有停止。

更新:感谢 Damien_The_Unbeliever 的解决方案

0 投票
2 回答
442 浏览

future - 如何用actor实现异步相互依赖的可取消操作?

我对 Actor 模型还很陌生,这就是为什么我认为已经建立了模式来处理我的常见场景,这些模式具有像演员和期货这样美丽的可组合抽象。

我有以下要求的异步操作:

  • 他们通过发送低级请求然后通过轮询监视实体的状态来使用遗留系统。所以实际操作的结果只能以延迟的方式获得,当观察到的状态达到期望的状态时,必须通知请求者。
  • 这些操作只有在其他一些操作完成后才能发出,它们应该并行等待。
  • 可以取消操作。当然,已经发出的低级请求是无法撤销的;取消意味着在我们依赖的操作完成后不发出实际的操作,当然这必须递归传播(如果我们等待一个依赖,并且它有多个挂起的操作,不要发出它们)。

我在 Futures 中考虑:第一个要求可以用例如 Akka 的map/来解决flatMap,第二个要求可以用traverse组合器来解决,而无需在程序上维护依赖项/依赖项。但我想不出取消的解决方案;期货不能被取消,如果组合,它们的组件是不可访问的。如何以函数的方式封装“取消当前操作”?Scala 的任何 Actor 框架是否支持这一点?

0 投票
1 回答
990 浏览

silverlight - 发生验证错误时,如何取消 Silverlight DataGrid 中的编辑?

我有DataGrid并且在单元格编辑期间发生验证错误(我的绑定引发异常并且错误正确显示给用户)。然后用户选择只单击某处(导航到我的应用程序的不同部分或结束编辑),我想取消编辑。但是,当存在活动验证错误时,数据网格拒绝结束编辑 - 这意味着我无法以任何方式操作网格项目,直到用户输入有效值或按下 Escape 键。

我可以做些什么来以编程方式结束编辑,或者除了尝试以编程方式发送 Escape 键或以编程方式编排值条目以重置值之外,没有其他方法可以做到这一点?

0 投票
1 回答
4468 浏览

c# - 取消 ThreadPool .QueueUserWorkItem 任务

我需要取消使用 ThreadPool.QueueUserWorkItem(...) 启动的后台任务。我知道 BackgroundWorker 有专门针对这类事情的构造,但我认为在这种情况下它是矫枉过正的,因为不涉及用户界面。通过取消,我的意思是强制完成回调方法。

在我的课程中添加类似以下内容的陷阱是什么?

有没有更好的办法?

0 投票
1 回答
292 浏览

c# - 如何取消需要在服务器端启动的长时间运行的操作(而不是由客户端启动)

我有一个类,它根据在对象状态更改之前引发事件以及在状态更改后引发事件的约定公开可取消事件。发布者(服务器)公开的更改前事件在表单上StateChanging并具有参数 a CancelEventArgs,而更改后事件在表单上StateChanged。这为事件的订阅者(客户端)提供了在操作开始之前取消操作的能力。

现在,我已经更改了其中一项操作,使其成为长时间运行的操作,并且我想让订阅者在操作开始后也可以取消操作(并且还可以了解操作进度)。我想到了基于事件的异步模式

问题是我想保留更改前和更改后事件模式,因为它是发布者在某些时候需要操作,而在异步模式中,在我看来是客户端专门询问某个异步运行的操作。另一种可能性(但对我来说似乎并不优雅)可能是让服务器公开一个事件(例如OperationRequired),使客户端知道需要在服务器端完成什么并相应地调用一个RunOperationAsync()方法。请发表评论并添加您的建议。

0 投票
3 回答
9498 浏览

java - 如何在java中取消ExecutorService

我编写了一个应用程序,它运行一些线程ExecutorService并等待它们完成,如下所示:

有时我需要取消这些线程的执行(整个ExecutorService)。
我试过exService.shutdownNow()了,但它会抛出java.lang.InterruptedException并且不会取消线程。
如何取消这些线程的执行?


编辑:作为南达的要求添加的 T1 类代码