我有一个 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(使用前将#替换为@)