我有3个需要按顺序处理的操作,它们是
我通过下面的代码执行此操作,但我认为它不干净。我想知道按顺序执行异步操作的另一种方法。
GetMainInformation.Completed += GetDetails1;
GetDetails1.Completed += GetDetails2;
答案 0 :(得分:1)
您可以创建一个队列。像这样:
GetMainInformation.Completed += GetMainInformationCompleted
GetDetails1.Completed += GetDetails1Completed
GetDetails2.Completed += GetDetails2Completed
发起请求:
requestCounter = 3;
GetMainInformationAsync();
GetDetails1();
GetDetails2();
在每个已完成的功能中:
void GetMainInformationCompleted()
{
// Store result in member variable
requestCounter--;
if (requestCounter == 0)
{
ProcessRequest();
}
}
答案 1 :(得分:0)
如果代码必须以特定的顺序运行,并且顺序运行,为什么不在GetDetails1的oncompletion中调用Getdetails2,以便它可以通过?要么。让你的服务具有调用所有3的功能,如果数据是相关的,那么在其中包含列表/数组的数据结构可能是可行的,例如。
String CustomerName,
String Address,
String PhoneNumber,
List<orders> Orders,
List<itemsMarked> ItemsMarked
当MainInfo转到客户部分时,details1会将订单和详细信息2转换为标记项目等。
答案 2 :(得分:0)
您可以使用Caliburn Micro的IResult和Coroutines。 How to ensure all properties have loaded in Silverlight ViewModel pattern (Concurrency Control?)