gpt4 book ai didi

wcf - 将 WCF 调用转换为异步 WCF 调用的最佳实践

转载 作者:行者123 更新时间:2023-12-01 11:10:23 26 4
gpt4 key购买 nike

我在尝试将所有常规 WCF 调用转换为异步 WCF 调用时遇到问题。我发现我重构了很多代码,但不确定具体该怎么做。我使用了我找到的方法 here但遇到了我需要事情按顺序发生的问题。

private void btnSave_Click(object sender, RoutedEventArgs e)
{

List<Item> itemList = GetList();
foreach(Item i in itemList)
{
DoSomeWork(i);

if(i.SomeID == 0)
{
DoSomeMoreWork(i);
}

UpdateRecord(i) // this can't execute until the above code is complete

}
}

private void DoSomeWork(Item i)
{
// call async method
}

private void DoSomeMoreWork(i)
{
// call async method
}

private void UpdateRecord(item i)
{
// call async method
}

重构代码以异步方式工作的最佳方法是什么,或者我是否需要完全重新考虑我的逻辑?我真的必须在各处插入计数器和开关以确保某些事情在其他事情执行之前完成吗?

编辑:我这样做的原因是在接下来的几个月里,我们将把这个 WPF 应用程序转换为 Silverlight,这需要异步调用。所以我正在尝试将我们的常规 WCF 调用转换为异步准备。我发现它需要不同的思维方式。

最佳答案

对于您正在做的事情,我想说处理事情的真正位置是对每个项目调用一次服务,而不是 3 个。

如果项目列表不是很大,最好用整个列表对服务进行一次调用...

private void btnSave_Click(object sender, RoutedEventArgs e)
{
List<Item> itemList = GetList();
foreach(Item i in itemList)
{
DoAllTheWorkAndUpdate(i);
}
}

或者...

private void btnSave_Click(object sender, RoutedEventArgs e)
{
List<Item> itemList = GetList();
foreach(Item i in itemList)
{
if(i.Id == 0)
{
DoLotsOfWorkAndUpdate(i);
}
else
{
DoSomeWorkAndUpdate(i);
}

}
}

或者...

private void btnSave_Click(object sender, RoutedEventArgs e)
{
List<Item> itemList = GetList();
DoTheWorkOnTheWholeList(itemList);
}

换句话说,感觉您的某些职责可能放错了地方 - 我通常更喜欢提供服务,我可以向他们调用一个电话。那么,异步性质就无关紧要了,因为您不是在执行一系列事件。

关于wcf - 将 WCF 调用转换为异步 WCF 调用的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/632123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com