C#遇到错误:System.Threading.Tasks.TaskCanceledException:已取消一个任务

文章讨论了.NETFramework4.7.1及以下版本中,WPF创建的调度程序可能导致偶发的异常。在新版本中,清理过程变得线程感知,引发问题。开发者可以禁用清理更改来缓解问题,通过设置AppContextSwitchOverrides。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上看了很多 都是说task创建了一个任务,需在任务最后通过CancellationTokenSource调用订阅服务区关闭程序
但是在本人开发期间,并未调用Task,仍然出现此报错,且报错是偶发的。
后面我在 stackoverflow 上找到可能的原因 希望帮到大家

这里大概描述一下

在里面NET Framework 4.7.1和早期版本,WPF可能会创建一个系统。Windows。线程。上的调度程序。NET终结器线程。这是在中修复的。NET Framework 4.7.2及更高版本,使弱事件的清理具有线程意识。因此,WPF可能会调用System。Windows。线程。调度员。调用以完成清理过程。
在某些应用程序中,终结器定时的这种变化可能会在AppDomain或进程关闭期间导致异常。这通常出现在应用程序中,这些应用程序在进程或AppDomain关闭之前没有正确关闭工作线程上运行的调度程序。这样的应用程序应该注意正确地管理调度器的生命周期。

在里面NET Framework 4.7.2及更高版本,开发人员可以禁用此修复程序,以帮助缓解(但不是消除)由于清理更改可能出现的时间问题。

若要禁用清除中的更改,请使用以下AppContext标志。

<configuration>
    <runtime>
        <AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
    </runtime>
</configuration>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值