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:

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

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

posted on 2015-07-14 22:20  匡匡锵锵  阅读(757)  评论(0编辑  收藏  举报

导航

AmazingCounters.com