controller是异步后台worker吗?在asp.netmvc2控制器中,我有以下代码:worker.RunWorkerAsync(var);我的问题是:这段代码是异步的,这意味着它启动了一个新线程,当“blah”并行执行时,控制器返回到视图?如果没有,我将如何获得这些结果?在MVC2中有一个称为AsyncController的新功能,它是在MVC中进行异步调用的正确方法。您的控制器应该继承AsyncController而不是控制器。那么你的主要操作方法名称应该在末尾有“async”。例如,如果您有一个名为Blah()的操作方法,您可以将其命名为BlahAsync(),框架将自动识别它(并使用BlahCompleted()进行回调):publicvirtualvoidBlahAsync(){AsyncManager.OutstandingOperations。增量();varservice=newSomeWebService();service.GetBlahCompleted+=(sender,e)=>{AsyncManager.Parameters["blahs"]=e.Result;AsyncManager.OutstandingOperations.Decrement();};服务。GetBlahAsync();}publicvirtualActionResultBlahCompleted(Blah[]blahs){this.ViewData.Model=blahs;返回this.View();有关AsyncController的更多信息:MVCAsyncControllerBackgroundWorker不是您想要的:无可以通过回调更新UI。您只想将工作项启动到线程池线程并继续。ThreadPool.QueueUserWorkItem方法可能更适合这里,或者使用新的任务并行方法:Task.Factory.StartNew(...)。我不确定这是否适合您(我并不是说它不会,我只是不确定)。简短的回答是肯定的,代码是异步的。但是,为了从BackgroundWorker获得任何类型的返回值,您需要处理它的RunWorkerCompleted事件。基本机制是将一些值放入DoWork事件中的e.Result属性,然后从RunWorkerCompleted事件中的e.Result属性中检索它(确保首先检查e.Error以查看是否在DoWork中抛出异常).我不确定它是否能解决问题的原因是您使用了using关键字,它确保将BackgroundWorker放置在代码块的末尾。由于它异步执行其工作,这可能会也可能不会阻止您有机会处理RunWorkerCompleted。我真的不确定-也许有人知道?我认为您可能会遇到问题,因为它会尝试在后台线程仍在使用时处理worker。如果不出意外,不可预测的行为。以上是C#学习教程:控制器是异步后台worker吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
