首页 > 编程知识 正文

字母,男生说的c是什么意思

时间:2023-05-04 09:36:59 阅读:58875 作者:4361

在编写代码的过程中经常需要并行操作,这种情况下甚至需要用到多线程操作。 net提供了多种多线程操作方法,但这里介绍了最简单的方法: ThreadPool.QueueUserWorkItem。

我先看实例代码

thread pool.queueuserworkitem (do something ); 隐私保护状态(对象状态) for ) intI=0; i int.MaxValue; I ) for(intj=0; j int.MaxValue; j () if ) j==int.maxvalue-1 ) ) I; } }实际上,灰色很简单,并定义了用于模拟耗时操作的测试方法DoSomeThing。 令人郁闷的是,通常应该没有人会写这样的方法。 如果需要异步调用DoSomeThing,则可以通过调用QueueUserWorkItem方法并将DoSomeThing作为回调函数传递来异步调用DoSomeThing

接下来,将描述取消异步操作,即,在异步操作执行期间强制停止函数的执行

将上面的DoSomeThing方法修改如下

privatevoidspanstyle=' font-family : arial,Helvetica,sans-serif;' do something/span (cancellation tokentoken,object state ) ) for(intI=0; i int.MaxValue; I ) for(intj=0; j int.MaxValue; j ) if (token.iscancellationrequested ) { break; } pre name=' code ' class=' cs harp ' span style=' white-space : pre '/span if (j==int.max value-1 ) I; } if (token.iscancellationrequested ) { break; } }

此DoSomeThing方法添加了CancellationToken类型的参数。 这样可以实时检测方法是否已取消。 其使用方法如下。

首先,创建一个新的CancellationTokenSource对象

cancellationtokensourcecancelsource=newcancellationtokensource (; 然后通过回调方法传递CancellationTokenSource对象的token

thread pool.queueuserworkitem ((o )={dosomething ) cancelsource.token,o ); ); 由于QueueUserWorkItem回调函数只需要一个参数,因此现在使用lambda构建包含一个参数的匿名函数,然后传递cancelSource.Token以创建新的可取消异步操作

如果需要中断异步操作,只需调用CancellationTokenSource的cancel方法,如下所示:

cancelSource.Cancel (;

其中CancellationTokenSource的作用实际上相当于全局状态变量。 如果只能完全用全局变量替换以实现任务中断,则可以如下重写DoSomeThing函数:

int statenum=0; 隐私保护状态(对象状态) for ) intI=0; i int.MaxValue; I ) for(intj=0; j int.MaxValue; j () if ) Statenum==1) ) { break; (if ) j==int.maxvalue-1 ) ) I; }if(Statenum==1) { break; }}此时,如果在执行耗时的操作过程中将statenum变量设定为1,也可以获得中断的效果。 当然,CancellationTokenSource还有其他功能,所以这里不详细说明。 详情请参照msdn

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。