gpt4 book ai didi

c# - 在 C# 中取消/中止任务

转载 作者:行者123 更新时间:2023-11-30 17:35:46 25 4
gpt4 key购买 nike

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

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

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

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

我也研究过使用 Threads 并做了一些 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();

关于c# - 在 C# 中取消/中止任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40750557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com