首页 新闻 会员 周边

在异步调用中,c#如何终止一个没有 CancellationTokenSource 传入参数的第三方 方法

0
[已解决问题] 解决于 2024-01-27 15:29

在async await 的异步应用中,如果有这样一个应用环境, taskA调用第三方的应用方法(LongRunningOperation),但该异步第三方的异步方法并未提供CancellationTokenSource 传参(当前我无法要求他增加CancellationTokenSource 传参),而我想终止等待,我使用了一个代理 TaskCompletionSource ,并使用await Task.WhenAny(taskA, taskCompletionSource.Task); 通过手动操作TaskCompletionSource.task 的状态也的确做到了提前终止当前的等待,但是,问题是,我仅仅终止了等待,但是task(LongRunningOperation)其实还在运行,仍然在消耗我的内存,我的希望是终止等待,也终止掉taskA对于系统的消耗 ,我目前能想到的是 abort,但这又是不推荐的,请大神指点如何该场景如何去处理,或是在异步中,我如何去彻底的kill掉taskA,

rossi努力努力的主页 rossi努力努力 | 初学一级 | 园豆:8
提问于:2024-01-17 11:48
< >
分享
最佳答案
0

你要明白为会么不推荐abort,因为我们不确定要跑的东西中间状态会对我们的系统产生什么样的影响。

如果确定绝无影响,当然可以kill

奖励园豆:5
生命体验之kevin-Y | 菜鸟二级 |园豆:474 | 2024-01-19 08:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册