• silverlight——多次异步调用的顺序执行


    遇到这样一个功能需求,对于后台的同一个服务调用多次,但要求传入的参数能够再一个执行完之后再进行另一个参数的执行。

    由于silverlight支持的是异步调用机制,故无法控制服务调用何时返回。那么如果使得参数队列的调用顺序执行呢?

    想了一个晚上,搞出了一种折中办法的办法。递归实现。

     1        ObservableCollection<taskVO> ocTask = new ObservableCollection<taskVO>();
     2         taskVO currentTask;
     3         int len = 0,index = 0;
     4         private void btn_click(object sender , RoutedEventArgs e){
     5             
     6            if(ocTask == null) {
     7                return;
     8            }
     9            len = ocTask.Count();
    11 currentTask = ocTask[index]; 12 13 index++; 14 client.methodAsync(currentTask); 15 } 16 17 void client_methodCompleted(object sender , CompletedEventArgs e){
    21 22 if(index >= len) 23 { 24 return; 25 } 26 currentTask = ocTask[index]; 27 index++; 28 client.methodAsync(currentTask);31 }

    其中ocTask是要进行多次异步调用的参数队列。

    在按钮事件中,只把第一个Task进行异步调用,在回调函数中,再把下一个Task进行异步调用,依次类推,直到最后一个参数执行完了,在Completed中进行Return,结束递归(这就是课本上所学的递归函数必须有终结条件,第一次把书本上的算法应用到实际,好开森开森^_^)

    PS:

    解决该功能不算解决了真正的异步队列顺序调用问题。本功能具有特殊性,多次异步调用的方法是同一个,造成了使用递归正好解决了这个问题。

    但递归本身的局限性,也限制了异步队列不能过长,否则导致递归栈溢出。因此这个问题还有待更加完善的解法。

  • 相关阅读:
    模仿企业在宣传中的动画效果页面
    模仿头条导航的左右滚动效果
    Ubuntu 1210怎么获得root权限登录
    Linux嵌入式 -- 内核简介(x86)
    linux ioctl()函数
    BUTTON标签和INPUT标签的区别【转】
    如何删除列表中的空格
    python第一模块数据类型
    python第一模块基础语法
    最短路 dijkstra+优先队列+邻接表
  • 原文地址:https://www.cnblogs.com/glamourousGirl/p/4646721.html
Copyright © 2020-2023  润新知