前言
在群里看到有人问如何取消这个 Task 的执行:
实际上这并不会取消 S1eepMode1 方法的执行:
这是为什么呢imtoken?
原因
首先imtoken,让我们看看 s_cts.Cancel 都做了啥:
public void Cancel => Cancel( false);
public void Cancel(bool throwOnFirstException)
展开全文
ThrowIfDisposed;
NotifyCancellation(throwOnFirstException);
private void NotifyCancellation(bool throwOnFirstException)
// If we 're the first to signal cancellation, do the main extra work.
if (!IsCancellationRequested
&& Interlocked.CompareExchange(ref _state, NotifyingState, NotCanceledState) == NotCanceledState)
实际上, Cancel 方法仅仅是将变量 _state 的值改为 NotifyingState imtoken。
那 Task.Run 传递 s_cts.Token 又有什么用呢imtoken?
public static Task<TResult> Run<TResult>(Func<Task<TResult>?> function, CancellationToken cancellationToken)
if( function== null) ThrowHelper.ThrowArgumentNullException(ExceptionArgument.function);
// Short-circuit ifwe are given a pre-canceled token
if(cancellationToken.IsCancellationRequested)
returnTask.FromCanceled<TResult>(cancellationToken);
原来, 是在创建 Task 前先检查令牌是否已经 Cancel ,以便快速终止imtoken。
那么imtoken,到底怎么才能 Cacel 已创建的 Task 呢?
实现
其实imtoken, Task.Run 的方法实现已经告诉我们正确的解决方案,那就是判断 cancellationToken.IsCancellationRequested :
public static async Task S1eepMode1(CancellationToken cancellationToken)
while( true)
if(cancellationToken.IsCancellationRequested)
return;
另外imtoken,也可以采取抛出异常的方式:
public static async Task S1eepMode1(CancellationToken cancellationToken)
while( true)
cancellationToken.ThrowIfCancellationRequested;
示例应用程序并不会捕获到这个异常imtoken,相关问题可以看我以前的文章《 如何保证执行异步方法时不会遗漏 await 关键字 》
结论
在创建 Task 时请记住,即使你执行了令牌取消操作,也并不意味着 Task 会停止运行imtoken。
添加微信号【MyIO666】imtoken,邀你加入技术交流群
TRtoken报道,TRtoken指出Square Enix在《FINAL FANTASY VII 25th Anniversary Celebration》活动上宣布,《最终幻想7:重制版 Intergrade(Final Fantasy VII Remake Intergrade)》今天将登陆S...
每经记者:陈鹏丽 每经编辑:杨夏 德奥退(SZ002260,股价0.53元,市值3.0亿元)难逃被终止上市的命运交易所。6月15日晚,德奥退(原德奥通航)的股东接到了公司股票确认被终止上市的消息。6月16日交易日结束后,公司股票将会被摘牌。 德奥退15日晚公告称,公司于6月15日收到深交所《股票终止...
心靠岸情感咨询:随着现在智能手机的普及,已经很少有人会使用钱包了,但一些年纪大的人还是会使用钱包,并且从风水而言,钱包也是具有招财作用的冷钱包。那么下面就来看看钱包招财最灵的方法。 钱包招财最灵的方法 1、钱养包 不管是穷人还是富人,他们的钱包从来不能缺钱,不管多或少,都要放一些在钱包里养着,因为这...
在 dotnet 6 里,推荐的网络通讯是使用 的超时机制 在 秒内如果文件还没上传完成,也就是网络活动还没完成,将会触发超时异常 这是比较非预期的逻辑,大部分情况下,在国内的弱网环境下,可能在上传过程中,网络几乎被断开,网络几乎被断开等同于上传速度非常慢imtoken。整个文件上传过程可以分为...
菲律宾央行将于四季度试点数字货币 据《菲律宾星报》(Philstar)5月3日报道,菲央行行长在接受采访时表示,央行正与几家银行和金融机构就四季度中央银行数字货币(CBDC)试点试验进行谈判数字货币。CBDC为菲纸币的等价物,并同样受到政府担保,为国家货币的数字形式。与面向公众的一般用途或零售CB...
6月5日上午,备受瞩目的2022年美国糖尿病协会(ADA)年会重磅奖项——Banting科学成就奖颁布,授予英国牛津大学Frances M. Ashcroft博士,以表彰其对糖尿病的理解、治疗或预防做出的重大长期贡献ada。 Frances Ashcroft博士是牛津大学生理学教授、牛津大学三一学院...