asp.net – 如何在WCF服务中返回值后继续处理
我有一个WCF服务,反过来调用其他几个Web服务.服务按优先顺序排序,但并行调用.每个服务都将以真或假的方式响应,并且当收到所有响应时,最优先的肯定将返回给客户端.
但是,在此期间的任何时候,最受欢迎的服务可能会以肯定的方式响应.此时继续查询其他服务是没有意义的,所以我希望取消执行并将结果返回给客户端. 我能做的很多: // Use parallelOptions to store the cancellation token ParallelOptions po = new ParallelOptions(); po.CancellationToken = cts.Token; Parallel.ForEach<IntegrationObj>(externalServices,po,x => { try { // Send requests SendExternalRequest(x); po.CancellationToken.ThrowIfCancellationRequested(); } catch (OperationCanceledException e) { /// Don't throw an exception if the loop was cancelled } catch (Exception e) { LogError(e.Message); } }); if (positiveResponses.Count > 0) { // Get the most preferred positive response and send it back to the client res = positiveResponses.Where( x => x.ID == PreferredServiceID) .FirstOrDefault(); } return res; 上面的代码是我的代码的一个非常简化的版本,但实际上它检查每个响应以查看它当前是否是最受欢迎的服务.如果是这样,它取消循环. 但是……以这种方式取消循环将等待已经调用的任何服务在终止循环之前完成.任何服务都有可能超时,这当然被视为否定.如果只是其中一次超时,它会在我的响应时间上增加10秒. 我想做的是以下之一: >将首选服务返回给客户端,然后继续处理已经启动的服务中的响应(这纯粹是为了记录目的,以便我知道这些服务的正/负速率). 所以我的问题是: 我想要实现的目标是什么?我意识到parallel.foreach可能不是这项工作的最佳工具,或者我可能无法在响应客户端后记录响应.最重要的要求是客户端收到快速响应,而无需等待服务响应,而“赢家”已被选中. 解决方法
它当前设置的方式是所有服务都是并行启动的,但只有在所有服务完成后才能对您的检查进行编程.
如果你想坚持使用foreach方法,你可以在foreach中编写if条件,这样如果服务首先完成,它将直接执行对肯定响应的检查,你可以做出相应的反应(返回值/杀死其他的).请注意,这种方法有更多的线程insafeties,您将不得不小心(从您的某个服务可能尝试写入的列表中读取).也可能同时完成2个服务,因此你的if语句会触发两次. foreach方法的另一种选择是为每个服务创建一个线程,将所有线程放在一个列表中,并在启动所有线程后立即启动一个while循环,以便为完成的服务继续检查(使用休眠过程).这样,通过断开while循环,您可以在其他线程仍在运行时返回该值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – 为什么OWIN的SignInAsync()没有设置IsAuthenticate
- asp.net-mvc – MVC5将项目添加到列表中
- 将TagHelpers嵌套在ASP.NET Core MVC 6中
- https://github.com/hoyuhub
- 使用RestSharp发布GZip内容
- asp.net-core – 用于Core的DocumentDB TransientFaultHand
- asp.net – 在jQuery对话框中的窗体中,MVC中通常采用的方法
- asp.net-mvc – 用于移动设备的displaymode,带有桌面视图,适
- asp.net-web-api – 刷新令牌 – 服务器端存储和撤销多个客
- 如何以编程方式将ListItems添加到ASP.NET中的DropDownList?
- ASP.NET MVC 3如何将Javascript注入主布局
- asp.net-mvc – 如何最好在服务器上安装MVC 3?
- 您可以为标准ASP.NET Web窗体验证器定制客户端Ja
- asp.net-mvc-3 – 可以在ASP.NET MVC 3上安装ASP
- environment-variables – 如何在生产环境中设置
- Asp.net Web Api开发 性能:使用Jil提升Json序列
- asp.net C#中的SQL IN运算符
- asp.net – 何时填充已排序的asp:GridView?
- asp.net-ajax – 找不到带ID的UpdatePanel
- asp.net-mvc – 重定向到不同的控制器