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

android - 支持取消的 Android 文件上传队列

我们正在开发一个 Android 应用程序,其中需要以异步方式将多张照片上传到我们的服务器。考虑一下,一旦拍摄了照片,它将开始上传。上传完成后,下一个(所有这些都将排入队列)将开始上传。

但是,支持取消功能也很重要,这意味着用户可以通过从队列中删除图像甚至取消正在运行的上传的方式与应用程序交互。

在寻找可能的解决方案后,我们得出了以下可能的场景:

1) 使用 IntentService 作为队列机制,并在其中实现我们自己的逻辑。但是,对于支持取消的难易程度存在一些担忧。

2) 使用 SD 卡和本地数据库来存储文件和服务来检查新文件。此处已对此进行了描述: Android(或iOS)-图像上传队列

3)想办法使用内置的Android DownloadManager进行上传(真的可以做到吗?)

4) 使用 AsyncTask 和 isCancelled() 函数。

5) 或者理想情况下找到另一个内置的 Android/Java 机制以无缝方式完成上述所有工作。

有任何想法吗?

0 投票
1 回答
338 浏览

task - 如何在没有 CancellationToken.IsCancellationRequested 的情况下取消任务?

我正在使用 C# 4.0 开发一个 WPF 应用程序,其中一些用户特定的代码将在运行时编译,然后在 AppDomain 中执行。该过程可能需要 10 毫秒或 5 分钟。AppDomain 将由Task.Factory.StartNew()创建。工作正常。

现在我希望能够取消/中断执行。我可以在代码执行时按下停止按钮,但如何取消任务?我知道:有CancellationToken.IsCancellationRequested属性,但我无法遍历某些内容。这就是为什么我在执行(原子)代码时无法检查该值的原因。并且卸载 AppDomain 不会停止任务。

仅供参考:我参加了Task课程,因为它易于使用。如果线程有用:没问题。

有人能帮我吗?一个简短的代码片段会很好:)。

谢谢你。

0 投票
1 回答
137 浏览

ruby-on-rails - Rails Cancel Confirmation Reason

I have an application, which contains calls. I want to be able to cancel the call and supply a reason for the call cancellation. So far I have my cancel action working in the controller, but I'm trying to figure out how to expand it so before it posts "cancel" to the call_status field it will also populate a cancel_reason field based on a drop down.

Here's what I have so far:

view code: cancel button


controller code: cancel action

I want either the confirmation pop-up shown, with the reason for cancellation, or the cancel action tied to a different view with a small form, that includes a reason.

0 投票
1 回答
98 浏览

.net - 非即时任务取消、重新启动和繁忙指示器

我有一个从按钮单击触发的后台异步任务。我有一个IsBusy在任务开始时更新的属性,并且在 finally 块内以说明取消或完成。

目前我的按钮点击事件取消了之前的任务并在重新点击时启动了一个新任务;然而,由于第一个任务的取消可能会在新任务的开始之后徘徊,布尔IsBusy指示器可能会变得不同步。

我的问题是如何处理这种情况。

我当前的解决方案不是直接更新布尔值,而是使用在开始和完成时递增/递减的整数 - 并IsBusy返回属性BusyCount > 0。然而,这需要增加线程安全性,并且感觉不是一个好的解决方案。

另一个想法是在任务被触发时存储它,并且只启动新任务作为第一个任务的延续。这解决了取消问题,但会导致不必要的延迟(尽管是部分延迟)和调用者而不是任务的“合同”。

我最后的想法是创建一个类似于 BusyTokenSource 类的东西,它分发一次性的 BusyTokens,这些 BusyTokens 从线程安全集合中添加/删除。但这似乎有点矫枉过正。

有没有更好/正确/通用的方法来处理这种情况?

编辑:

我最终还是按照上面的最后一个想法写了“BusyToken”类。这样我可以简单地将一个函数包装在 a 中using(BusyTokenSource.GetToken()){},让内部收集并Dispose处理计数和忙碌状态。

0 投票
1 回答
484 浏览

c# - 在 WPF XBAP 应用程序退出期间取消后台任务

我有一个 wpf xbap 应用程序,可以在后台下载一些数据。需要在应用程序退出时停止下载并刷新缓存。现在实现如下:
App.xaml :

应用程序.xaml.cs:

背景图像加载器.cs:

Stop 被调用,loaderTask 不为 null 并且 Status 正在运行,但在 ts.Cancel() IsCancellationRequested 属性未更改之后(即使在将整个任务包装在 while(true){..} 中,如此所述)。加载停止,但我想这要归功于自动 GC。我的刷新方法没有执行。我错过了什么?ps 另外我需要重构功能以同时在单独的线程中运行任务,但害怕副作用。任何帮助表示赞赏。提前致谢。

0 投票
1 回答
2306 浏览

android - 停止 HttpURLConnection 连接

前段时间有人问过这个问题并回答了这个问题。然而,答案还没有帮助我。我与另一篇文章的 OP 处于相同的位置:我有一个 Asynctask,我在其中连接到某个网站,但是,由于互联网连接滞后,大多数情况下连接需要一些时间。我希望用户能够随时停止尝试连接。

每当按下按钮时,整个 AsyncTask 只有在建立连接后才会取消。是否可以在按下按钮时立即停止整个过程?可以使用默认的httpurlconnection来完成吗?

我尝试在忙时使用断开连接来触发异常con.getInputStream,但它无法正常工作。

0 投票
1 回答
945 浏览

c# - 如何在 DropNet 中实现 CancellationToken 支持?

我想在 MonoTouch 应用程序中异步访问 DropBox API。我认为使用本身依赖于RestSharp的DropNet
会很方便。

这两个库都运行良好,但返回 s 的 DropNet 重载Task无法让您将请求与取消令牌相关联。

这是他们的实现的样子:

ExecuteTask实现基于TaskCompletionSource最初由 Laurent Kempé编写:

如何更改或扩展此代码以支持取消CancellationToken
我想这样称呼它:

0 投票
4 回答
9514 浏览

c# - 停止线程、ManualResetEvent、volatile boolean 或 cancelToken

我在 Windows 服务中有一个线程 (STAThread),它执行大量工作。当 Windows 服务重新启动时,我想优雅地停止这个线程。

我知道几种方法

  • 一个不稳定的布尔值
  • 手动复位事件
  • 取消令牌

据我发现 Thread.Abort 是不行的......

最佳做法是什么?这项工作是在另一个类中执行的,而不是启动线程的类,因此有必要在构造函数中引入 cancelToken 参数,或者例如具有一个 volatile 变量。但我就是不知道什么是最聪明的。

更新
只是为了澄清一点,我已经总结了一个非常简单的例子来说明我在说什么。如前所述,这是在 Windows 服务中完成的。现在我在想一个在循环中检查的 volatile boolean 或 cancelToken.... 我不能等待循环完成,如下所述,它可能需要几分钟,使服务器的系统管理员相信当他们需要重新启动服务时,服务出现问题......接口被调用,因此需要进行小清理。

更新
刚刚检查了性能,使用在代码中“检查”isCancelled 状态的cancellationToken 比在ManualResetEventSlim 上使用waitOne 快得多。一些快速计算者,如果在 cancelToken 上在 for 循环中迭代 100.000.000 次,我大约花费了我。500 毫秒,其中 WaitOne 的成本约为。3 秒。因此在这种情况下的性能使用cancellationToken 会更快。

0 投票
5 回答
1718 浏览

c# - 取消方法执行的正确方法

可能重复:
如何中止/取消 TPL 任务?

我有一个需要一些时间来执行的方法,因此我将结果作为回调返回。我的方法看起来像:

现在我希望能够停止执行该方法,以防用户不想等待。结果,这就是我所制定的:

什么是中止方法执行的更合适的方法?

编辑

感谢您的回答。我现在记得取消令牌的事情。象征性的东西很难记住。我想我会使用这种方法:

使用你们在这个问题的答案上建议的方法和这种方法会更好吗?我更喜欢这种方法。我认为它比取消令牌更容易阅读。

PS。我的 Visual Studio 放置了很多空间。随意格式化代码:)

0 投票
2 回答
756 浏览

.net-4.5 - 异步存储库和 CancellationToken

我们正在迁移到 .NET 4.5,我正在考虑将异步添加到我的存储库中:

实现可能会调用 DB、WebServices 等。

我的问题是,我应该支持 CancellationToken 吗?

(别担心 - FindAllAsync() 可能是基于 Rx 的:))