博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步顺序执行
阅读量:6085 次
发布时间:2019-06-20

本文共 1184 字,大约阅读时间需要 3 分钟。

异步顺序执行

在wpf中,操作数据库通常都是通过服务进行读取的,由于异步的特殊性,保存的时候如果分成几步进行处理的方法,此时就会有一定的麻烦。

 

MethodA.Completed->MethodB.Completed->MethodC

表示的是如果MethodA执行成功之后,结果正确在去执行MethodB,如果MethodB执行成功之后,结果正确则继续执行MethodC。

 

做法通常有两种:第一种是将MethodA,MethodB,MethodC移动到服务的一个方法中,这样所有的逻辑处理都在服务端进行,这是一种理想的状态。当然也有不理想的状态,就是调用了几个服务的情况,MethodA在Service1种,MethodB在Service2中,MethodC在Service3中,不管是设计的原因还是业务的原因,这种情况一旦出现,则将方法移动到统一的方法中就不在适用了,在这种情况下,如果设计结构就成了问题。

 

如:MethodA的职能是验证,MethodB的只能是处理某个结果,MethodC的职能是保存。

如果写成如下的代码:

MethodA()

{

MethodB(){  

MethodC(){

      }

}

}

影响了职能单一,MethodA究竟是要执行验证,还是要执行保存?既然是验证,那么验证就可能在多处使用,那么该方法就是去了应有的作用。

 

在解决这类情况的一个理想状态时将MethodA,MethodB,MethodC分离开来,同时可以组合实现,即

MethodA

MethodB

MethodC

那么他们的关系又该如何维护呢?什么时候MethodA

结束了该执行MethodB了,什么时候MethodB执行结束了在执行MethodC?

为了维护这种关系,我们应该做一个简单的门面,但是门面是有了,顺序还是通知不了啊?那我们就把方法给穿进去啊,MehtodA执行结束的时候,自动执行MethodB,这样既解开了MethodA和Method的耦合,同时实现了功能,可问题又来了,那如果MehtodA之后执行的是MehtodM呢?看来把MethodA传入还得改善一下,传入一个委托吧(Action,Func),当然Func在异步的时候就用不上了,方法执行什么时候返回结果还不知道,因此基本上都是没有返回值(void)的。

 

那么这样一改就成了:

MethodA(Action nextMethod)

MethodB(Action nextMethod)

MethodC

 

再加上一个外观提供调用则

TestMethod(){

MehtodA(MehtodB(MethodC));

}

 

OK ,问题解决掉,不知道还有没有更好的方法。

转载于:https://www.cnblogs.com/mstone/archive/2013/05/11/Nusn_Async.html

你可能感兴趣的文章
程序员最喜爱的12个Android应用开发框架二(转)
查看>>
vim学习与理解
查看>>
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>
Redis学习记录初篇
查看>>
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
查看>>
Web实时通信技术
查看>>
第三章 计算机及服务器硬件组成结合企业运维场景 总结
查看>>
IntelliJ IDEA解决Tomcal启动报错
查看>>
默认虚拟主机设置
查看>>
php中的短标签 太坑人了
查看>>
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>
数组扩展方法之求和
查看>>