下面的代码基本上是在SilverLight应用程序中调用域服务。
LoadOperation<tCity> loadOperation = _dataContext.Load(query,callBack, true);
你能告诉我先做了哪个操作吗?
在分配loadOperation变量之前或在分配了loadOperation变量之后调用了callBack方法吗?
由于
答案 0 :(得分:2)
假设它是一个异步操作,理论上它可能以任何一种方式发生。异步操作应该在另一个线程中进行, if 在Load
返回之前完成,可以在赋值完成之前调用回调。
在实践中,我希望异步调用使多的时间长于方法结束时的内容Load
- 但我也不会把这个假设放入代码。除非有显式同步以确保在回调之前进行赋值,否则我认为依靠它不是一个好主意。
即使现在首先发生作业,也要考虑:
依赖于操作的顺序违背了异步的精神。
你应该(IMO)设置一些东西,随时准备让它回来。这就是你应该思考的方式。一旦你开始滑坡“我确信我能够在回复之前做一点的小工作”你最终会陷入一个充满不确定性的世界。
答案 1 :(得分:0)
首先,我会说你的回调没有任何假设。但除此之外,我没有看到在分配之前回调是如何发生的。在线程旋转后,加载操作必须立即返回。
答案 2 :(得分:0)
这个非常具体的RIA服务问题有3个可能的答案:
案例1: 基于.Net Reflector对所讨论的实际加载方法的调查,它似乎不可能在返回发生之前调用回调。 (如果有人想争辩他们欢迎解释旋转后台线程的复杂性)。
案例2: 可能必须在反射的代码中显示“天空正在下降”的证明。 (如果有人想要支持这一点,也欢迎他们解释旋转后台线程的复杂性。)
案例3: 实际上,RIA Services加载方法的返回值通常用于分配延迟加载数据源。它不会被回调使用。回调作为参数传递其自己的加载数据上下文。
您不关心(因为您/不应该使用回调中的分配值)。