首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何取消异步调用?

如何取消异步调用?
EN

Stack Overflow用户
提问于 2009-11-13 21:57:53
回答 2查看 10.7K关注 0票数 18

如何取消异步调用?.NET应用程序管理器似乎不支持此操作。

我的代码中有以下循环,它在ThreadPool上产生多个线程。当我单击UI上的按钮时,我希望这些线程(或异步调用)结束。

代码语言:javascript
复制
foreach (var sku in skus)
{
    loadSku.BeginInvoke(...
}

除了创建一个全局的“取消标志”并使用异步方法来查找它之外,还有其他更好的解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2009-11-13 22:00:39

如果您正在寻找"TerminateAsnyc“方法,您将找不到它。因此,在使用Control.BeginInvoke/EndInvoke时,可能没有优雅的方法。因此,我会将布尔标志放在UI线程上,并让异步执行的委托在执行时定期检查该标志。

但是,您可以使用后台工作线程签入。

票数 1
EN

Stack Overflow用户

发布于 2009-11-13 22:04:49

当然还有其他的解决方案,尽管我不知道我是否会称它们为“优雅”。

您可以在线程上调用Abort或Interrupt,但这些可能会产生一些负面影响。就我个人而言,对于这样的事情,如果可能的话,我更喜欢使用BackgroundWorker。它有一个取消功能,但它类似于您提到的-类中的一个布尔标志,您必须在执行代码中定期检查它(至少它不是一个全局标志)。This post on stopping threads in .NET有点老了,但它克服了我上面提到的其他选项的一些缺陷。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1729346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档