当前位置: 首页 > 编程语言 > C#

无法在单击按钮时立即中断循环c#mvcShare

时间:2023-04-11 01:59:52 C#

被点击所以我保留一个标志并将其设置为false以打破循环。布尔标志=真;publicasyncDemo(){while(flag==true){dosomething...}}现在点击按钮我调用一个动作方法来停止while循环-publicActionResultStopLoop(){flag=false;ReturnView("Index")}但是在点击按钮后几乎需要一分钟才能命中这个StopLoop。为什么?可能都在同一个UI页面上并共享同一个homecontroller我可以做些什么?我有一个请求2个按钮的按钮,循环开始,我想要另一个按钮单击以请求循环停止。如果您说一个请求启动while循环,而您希望另一个请求阻止它,那么这对于ASP.NETMVC是不可能的,因为它是无状态的。返回视图后,while循环不再运行。在您的情况下,看起来StopLoop方法被触发只花了一分钟。可能真正发生的是您的while循环可能会无休止地运行,IIS将其终止,然后处理停止循环请求。如果要并行运行两个任务,则需要为第二个任务使用一个新的线程,同时还需要有条件地停止第二个线程。CancellationTokenSourceTokenSource=newCancellationTokenSource();CancellationTokenCt=TokenSource.Token;TaskDemo=Task.Run(()=>{do{Thread.Sleep(1000);Trace.Write("loop");}while(!Ct.IsCancellationRequested);},Ct);布尔标志=真;如果(标志){TokenSource.Cancel();您可以在此处阅读有关异步编程的更多信息。显式创建和运行任务以及任务取消更新如果您想在Web应用程序中执行此操作,则必须在请求完成后不会终止的线程中运行第二个任务。公共类MvcApplication:System.Web.HttpApplication{staticTaskDemo=null;静态CancellationTokenSourceTokenSource=null;protectedvoidApplication_Start(){AreaRegistration.RegisterAllAreas();FilterConfig.RegisterGlobalFilters(GlobalFilters.Routers.Filtersigout););BundleConfig.RegisterBundles(BundleTable.Bundles);TokenSource=newCancellationTokenSource();CancellationTokenCt=TokenSource.Token;Demo=Task.Run(()=>{do{Thread.Sleep(1000);Trace.Write("循环");}while(!Ct.IsCancellationRequested);},Ct);}publicstaticvoidCancelLoop(){TokenSource.Cancel();你必须取消第二个任务(其中包含while循环)请求。例如:以上是C#学习教程:循环分享的全部内容在c#mvc点击按钮不能立即中断。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicclassHomeController:Controller{publicJsonResultButtonPressed(){MvcApplication.CancelLoop();返回Json("取消",JsonRequestBehavior.AllowGet);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: