在 C# 中取消/中止任务

2023-12-14

我有一个 C# 程序,它执行一些服务调用。 我需要在这个程序中添加一些代码,以便在单击按钮(winform)时能够停止这些服务调用[例如,如果调用时间太长并且用户感到无聊]。

困难在于我无法修改执行调用的代码块。

为此,我计划使用 Unity 框架进行一些拦截。 我想在每次输入服务调用代码块时创建一个任务。然后,如果用户单击我的按钮,则取消此任务。

我查看了 CancellationToken 但问题是我无法修改调用块,所以我不能这样做if(ct.IsCancellationRequested) or ct.ThrowIfCancellationRequested();AutoResetEvent 和 ManualResetEvent 也是如此。 这些调用并不总是异步的并且使用取消令牌进行,因此捕获OperationCanceledException我认为这是不可能的。

我也考虑过使用线程并做一些Thread.Abort()但这种方法似乎每次有人叫它就会杀死小狗。

这是我当前程序的示例(拦截尚未实现,我想首先在单个调用上测试它):

private void Test()
{
    Task.Factory.StartNew(MyServiceCallFunction); // How to cancel the task when I press a button ?
}

// Can't touch the inside of this function :
private void MyServiceCallFunction()
{
    // Blabla I prepare the datas for the call
    // Blabla I do the call
}

我怎样才能做到这一点 ? (我没有义务使用任务)

谢谢你,


“正确”的方法是使用 CancellationTokens,但由于您无法修改正在运行的代码,唯一的其他方法是杀死小狗并使用 Thread.Abort()

就像是:

Thread t;
Task.Factory.StartNew(() =>
    {
        t = Thread.CurrentThread;
        MyServiceCallFunction();
    });

t.Abort();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中取消/中止任务 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 如何从 WSDL URL 生成 WSDL 文件?

    我的问题是我创建了一个网络服务客户端wsimport当创建其服务对象时 由于 HTTPS 它失败了 如下所示 MyService Service service new MyService Service new URL https www
  • 检查 JSON 中是否存在对象

    我需要知道 JSON 字符串中是否存在某个对象 并根据该对象的存在执行不同的操作 如果它不存在 我想省略该对象 因为它会抛出 NullPonterException 我尝试过使用if但没有成功 有人可以告诉我如何检查对象的存在吗 先感谢您
  • Java WAR - 从外部 JAR 加载 Spring bean

    我想在我的 Spring MVC Web 应用程序 打包为 WAR 中加载一些带有注释的 Spring 框架 bean Service来自外部 jar 它负责访问数据库和位于类路径中在 WEB INF lib 下 如果可能的话 最好使用以下
  • Azure DevOps 存储库备份副本 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我们已经创建了存储库https dev azure com 运行良好 现在 我的经理希望定期获得该存储库的备份副本 我向经理解释说https dev
  • 将 div 内的图像与响应高度垂直对齐

    我有以下代码 它设置一个容器 当调整浏览器大小 以保持方形纵横比 时 该容器的高度随宽度而变化 HTML div class responsive container div class dummy div div class img co
  • 如何使用 Meteor 为 MongoDB 提供配置?

    The meteor命令都会启动 Meteor 和 MongoDB 我怎么有meteor启动 MongoDB 时执行与此命令等效的命令mongod profile 1 slowms 1 或者 meteor 使用的某个地方是否有 mongo
  • Symfony ChoiceType $choices - 标签和值交换

    交响乐2 8 2 根据 Symfony 文档 选择选项是一个数组 其中数组键是项目的标签 数组值是项目的值 http symfony com doc 2 8 reference forms types choice html choices
  • qsort 没有对字符串数组进行排序[重复]

    这个问题在这里已经有答案了 我尝试使用 qsort 对字符串数组进行排序 这是我的数组的内容 a orange apple mobile car 这就是我使用 qsort 的方式 int myCompare const void a con
  • 从命令行列出所有环境变量

    是否可以列出all来自 Windows 命令提示符的环境变量 相当于PowerShell的东西gci env or ls env or dir env Just do SET 你也可以做SET prefix查看名称以以下开头的所有变量pre
  • 使用导航菜单显示隐藏 html 代码/内容 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我有一个按点击付费 PPC 登录页面 该页面的顶部有一个菜单 主页 服务 关于 我不想有另外两个页面用于服务 关于 我只想更改内容并替换所有内容 包括和之后的内容div class i
  • 矩阵上的垃圾、索引和唯一(如何保持矩阵格式)

    在 8x8 矩阵上使用此方法 gt gt junk index unique data first Capture the index ignore junk gt gt data sort index Index data with th
  • 为什么Java中的String.hashCode()有很多冲突? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 为什么 String ha
  • 无法加载文件或程序集或其依赖项之一。该系统找不到指定的文件。 (GAC 不允许)

    我有一个 主 程序 它使用反射动态加载我自己的 plugin dll 文件 plugin dll 文件通过使用 Visual Studio 引用来引用第三方 device dll 只要 device dll 和 plugin dll 与 M
  • jQuery - 从文本区域选择所有文本

    我怎样才能做到当您在文本区域内单击时 它的整个内容都会被选中 最终 当您再次单击时 取消选择它 为了防止用户在每次尝试使用鼠标移动插入符号时选择整个文本时感到恼火 您应该使用focus事件 而不是click事件 以下内容将完成这项工作并解决
  • Mongoose 和引用 UUID 数组不转换

    使用 mongoose uuid 库时 我可以为模式设置 UUID 类型 因此当我读取数据时 它采用字符串 utf 8 格式 而当我保存数据时 它采用 UUID ObjectID BSON 类型 4 格式 这对于我的架构中的顶级或平面直接值
  • 如何在C++中使用虚函数来实现多态行为?

    我对 C 的这些重要功能很陌生 我已经在这里阅读了有关这些主题的一些问题 答案 并用谷歌搜索了一些文档 但我仍然对此感到困惑 如果有人能给我建议一些好的在线教程或书籍章节 让我轻松而缓慢地理解这个概念 并从基础开始 那就太好了 另外 如果有
  • 使用不同类型的行反序列化 XML C#

    反序列化 XML 时遇到问题 无法理解如何制作财产data根据 xml 属性不同idxds 生成一个公共属性data结合了数据 UserInfo 数据 UserTransactions 的属性 尝试过解决方案this线程但没有运气 XML
  • jQuery:快速滚动 - 可能吗?

    我有一个带有固定标题的可滚动表格 是否可以在滚动条上进行 捕捉滚动 这意味着表格行不会逐像素滚动 而是捕捉响应其行高 以便更好地查看 答案是 是 您可以调整 scrollTop 并使其成为您想要的任何内容以响应 onscroll 事件 阅读
  • 对对象的所有引用

    Java中是否可以获取一个对象的所有引用 我需要检查的是对象是否已删除所有回调订阅 Thanks 这可以通过JVMTI通常由堆分析器完成 然而 它不能在 Java 内部完成
  • 在 C# 中取消/中止任务

    我有一个 C 程序 它执行一些服务调用 我需要在这个程序中添加一些代码 以便在单击按钮 winform 时能够停止这些服务调用 例如 如果调用时间太长并且用户感到无聊 困难在于我无法修改执行调用的代码块 为此 我计划使用 Unity 框架进