检查多个异步Web服务调用的结果

卡尼斯

我有许多Web服务,它们都实现了我想从另一个应用程序调用的相同接口。

在每个Web服务上,我需要依次调用两个方法A()和B(),并且我想检查每次调用的响应是否有错误(不是异常)。我正在尝试使用异步来完成所有操作,但是我很难理解何时可以检查方法的响应是否有错误,如果我在调用异步之后进行检查,则会得到NullReferenceException(可以理解),但是该怎么做我将两种方法的结果结合起来吗?

以下是没有任何结果检查的代码概述

List<DeviceClient>  clients; // List of client interfaces to web-service
var startTasks = clients.Select(dc => SetupDevice(dc.Client);
await Task.WhenAll(startTasks);
...

 private async Task SetupDevice(DeviceClient client)
 {   
  await client.A();
  await client.B();
 }

我想做的是检查A()的结果,如果失败,则抛出一个异常,与B()相同。

 private async Task SetupDevice(DeviceClient client)
 {   
  var respA = await client.A();
  if (respA.Error)
    throw new Exception("A failed");

  var respB = await client.B();
  if (respB.Error)
    throw new Exception("B failed");
 }

但是,由于对A()的调用是异步的,因此respA将为null。这可能吗,还是我需要分别在对A()和B()的调用上调用GetAwaiter()。GetResult()?

即使我必须同步处理每个客户端上对A()和B()的单独调用,我仍然希望将不同的客户端异步调用-如果可以的话。

谢谢,Canice。

加布里埃尔·卢西(Gabriel Luci)

但是,由于对A()的调用是异步的,因此respA将为null。

那不是为什么null唯一的办法respA可能null是,如果A()返回null如果null是有效的返回值,但不能使用该值,则也要检查该值:

private async Task SetupDevice(DeviceClient client)
{   
  var respA = await client.A();
  if (respA == null || respA.Error)
    throw new Exception("A failed");

  var respB = await client.B();
  if (respB == null || respB.Error)
    throw new Exception("B failed");
}

await关键字已经解开的结果给你,所以没有必要使用GetAwaiter().GetResult()这样做:

var respA = client.A().GetAwaiter().GetResult();

会在中为您提供相同的值respA,但会在等待线程时将其阻塞,这意味着它将不再是异步的。

Microsoft建议您阅读有关使用async/的相当不错的文章await它们可以帮助您准确了解发生了什么:异步编程和异步等待

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在服务中调用服务并返回异步结果?

来自分类Dev

异步Web服务调用并非始终异步

来自分类Dev

如何在 Angular 服务中返回多个异步调用的结果

来自分类Dev

多个异步服务调用后的AngularJS函数

来自分类Dev

对同一Web服务进行多个异步调用的最佳方法

来自分类Dev

ASMX Web服务的异步调用

来自分类Dev

Spring Integration异步Web服务调用

来自分类Dev

包装异步Java Web服务调用

来自分类Dev

用多个异步调用的结果填充 ObservableCollection,无需等待

来自分类Dev

用多个异步调用的结果填充 ObservableCollection,无需等待

来自分类Dev

一次多个Web服务调用

来自分类Dev

在页面构造函数中异步调用Web服务

来自分类Dev

异步WCF服务调用

来自分类Dev

等待异步Web服务调用响应以处理下一个Web服务ios

来自分类Dev

如何为Web服务的EventArgs返回的结果调用PaintEventArgs

来自分类Dev

当没有结果返回时,如何防止Angular异步管道频繁进行服务器调用?

来自分类Dev

反复调用异步Web服务,但从不使用C#同时调用

来自分类Dev

Web服务的异步调用在服务器上有意义吗?

来自分类Dev

如何在循环中返回多个(并行)异步函数调用的累加结果?

来自分类Dev

如何在ReactJS中同时调用多个ajax(并获得异步结果)?

来自分类Dev

如何在循环中返回多个(并行)异步函数调用的累加结果?

来自分类Dev

异步/等待对asmx服务的调用

来自分类Dev

ServiceStack服务调用异步方法

来自分类Dev

C#Web服务:调用异步方法的Web方法返回Taskoff对象

来自分类Dev

C#Web服务:调用异步方法的Web方法返回Taskoff对象

来自分类Dev

chrome扩展程序中的多个Web服务调用

来自分类Dev

RxJava-组合多个/不同的Web服务调用

来自分类Dev

chrome扩展程序中的多个Web服务调用

来自分类Dev

Android多个异步调用

Related 相关文章

  1. 1

    在服务中调用服务并返回异步结果?

  2. 2

    异步Web服务调用并非始终异步

  3. 3

    如何在 Angular 服务中返回多个异步调用的结果

  4. 4

    多个异步服务调用后的AngularJS函数

  5. 5

    对同一Web服务进行多个异步调用的最佳方法

  6. 6

    ASMX Web服务的异步调用

  7. 7

    Spring Integration异步Web服务调用

  8. 8

    包装异步Java Web服务调用

  9. 9

    用多个异步调用的结果填充 ObservableCollection,无需等待

  10. 10

    用多个异步调用的结果填充 ObservableCollection,无需等待

  11. 11

    一次多个Web服务调用

  12. 12

    在页面构造函数中异步调用Web服务

  13. 13

    异步WCF服务调用

  14. 14

    等待异步Web服务调用响应以处理下一个Web服务ios

  15. 15

    如何为Web服务的EventArgs返回的结果调用PaintEventArgs

  16. 16

    当没有结果返回时,如何防止Angular异步管道频繁进行服务器调用?

  17. 17

    反复调用异步Web服务,但从不使用C#同时调用

  18. 18

    Web服务的异步调用在服务器上有意义吗?

  19. 19

    如何在循环中返回多个(并行)异步函数调用的累加结果?

  20. 20

    如何在ReactJS中同时调用多个ajax(并获得异步结果)?

  21. 21

    如何在循环中返回多个(并行)异步函数调用的累加结果?

  22. 22

    异步/等待对asmx服务的调用

  23. 23

    ServiceStack服务调用异步方法

  24. 24

    C#Web服务:调用异步方法的Web方法返回Taskoff对象

  25. 25

    C#Web服务:调用异步方法的Web方法返回Taskoff对象

  26. 26

    chrome扩展程序中的多个Web服务调用

  27. 27

    RxJava-组合多个/不同的Web服务调用

  28. 28

    chrome扩展程序中的多个Web服务调用

  29. 29

    Android多个异步调用

热门标签

归档