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

更结构化的协程调用方式?Share

时间:2023-04-10 10:49:06 C#

一种更有条理的协程调用方式?在我的代码中,我需要在前一个完成后调用多个网络请求。例如:voidInit(){StartCoroutine(FirstRequest());}IEnumeratorFirstRequest(){www=newWWW(my_url);收益回报www;StartCoroutine(SecondRequest());}IEnumeratorSecondRequest(){www=newWWW(my_url);收益回报www;如果函数体很大,它可能会令人困惑和混乱,在Javascript中,有Promises,所以我可以这样做:functioninit(){returnvalidateParams().then(firstRequest)。then(SecondRequest).then((result)=>{console.log(result)returnresult})}任何人都知道我应该如何扩展Coroutines以便获得类似的效果?这很简单。只需使用yieldreturnSecondRequest();或者yieldreturnStartCoroutine(SecondRequest());.在协程名称或StartCoroutine之前的yield应该让它等待协程返回,然后再继续执行它下面的其他代码。例如,您有四个应按顺序调用的协程函数:IEnumeratorFirstRequest(){www=newWWW(my_url);收益回报www;}IEnumeratorSecondRequest(){www=newWWW(my_url);收益回报www;}IEnumeratorThirdRequest(){www=newWWW(my_url);收益回报www;}IEnumeratorFourthRequest(){www=newWWW(my_url);收益回报www;然后你可以这样做:voidInit(){StartCoroutine(doSequentialStuff());}IEnumeratordoSequentialStuff(){//先请求然后等待它返回yieldreturnFirstRequest();//做第二个请求然后等待它返回yieldreturnSecondRequest();//做第三个请求然后等待它返回yieldreturnThirdRequest();//做第四个请求然后等待它返回yieldreturnFourthRequest();编辑:如果我只获得成功状态,如果我只去下一个协程怎么办?例如www=newWWW(my_url);收益回报www;如果(!www.error)StartCoroutine(SecondRequest());www=newWWW(my_url);收益回报www;if(!www.error)StartCoroutine(SecondRequest());在这种情况下,您应该使用Action作为对于协程函数中的参数:IEnumeratorFirstRequest(ActionreqStat){www=newWWW(my_url);收益回报www;如果(!string.IsNullOrEmpty(www.error))reqStat(false);否则reqStat(真);}IEnumeratorSecondRequest(ActionreqStat){www=newWWW(my_url);收益回报www;如果(!string.IsNullOrEmpty(www.error))reqStat(false);否则reqStat(真);}IEnumeratorThirdRequest(ActionreqStat){www=newWWW(my_url);收益回报www;如果(!string.IsNullOrEmpty(www.error))reqStat(false);否则reqStat(真);}IEnumeratorFourthRequest(ActionreqStat){www=newWWW(my_url);收益回报www;如果(!string.IsNullOrEmpty(www.error))reqStat(false);否则reqStat(真);}用法:以上是C#学习教程:调用Coroutines更有条理的方法?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注。}IEnumeratordoSequentialStuff(){boolreqStat=false;//先请求然后等待返回yieldreturnFirstRequest((status)=>{reqStat=status;});//做第二个请求然后等待它返回if(reqStat)yieldreturnSecondRequest((status)=>{reqStat=status;});//做第三个请求然后等待它返回if(reqStat)yieldreturnThirdRequest((status)=>{reqStat=status;});//做第四个请求然后等待它返回if(reqStat)yieldreturnFourthRequest((status)=>{reqStat=status;});}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:

最新推荐
猜你喜欢