c# - 如何检查底层异步 Task.Result 结果是否为空
问题描述
背景
目前我有一个与 SOAP 服务异步通信的 .NET Core 3.1 WebAPI 方法。当我运行我的任务并获得响应时,它通常可以工作,但有时 SOAP 服务会发送一个 200 Ok() 并带有一个空响应。这对我造成了严重破坏。如何检查底层 Result/GetSomeFancyDataResult 是否为空?
因为 GetSomeFancyDataResult 是“结果”下的结果,所以我得到了一个有效的“结果”,但“GetSomeFancyDataResult”为空,当我尝试检查它是否为空时,我得到一个错误,它没有被实例化。
示例代码
// make an async request to legacy SOAP service
var client = new mySoapService.serviceClient();
var request = new mySoapService.GetSomeFancyDataRequest(1, "abc", 234);
var task = Task.Run(async () => await client.GetSomeFancyDataAsync(request));
// how to check if GetSomeFancyDataResult exists ?
if (task.Result.Equals(null) || task.Result.GetSomeFancyDataResult.Equals(null))
return null; // exit here, abort!
// process the results when data is found in the result ??
var results = task.Result.GetSomeFancyData.Select(result => result.MyFancyFieldOne);
我的问题
我的问题是这不能按预期工作......
// how to check if GetSomeFancyDataResult exists ?
if (task.Result.Equals(null) || task.Result.GetSomeFancyDataResult.Equals(null))
return null; // exit here, abort!
也许我已经盯着这个太久了。我在这里俯瞰什么?我已经搜索了 SO 和互联网,但还没有找到如何正确检查它是否为 null。帮助?
解决方案
考虑只等待结果并对返回的值执行检查。
// make an async request to legacy SOAP service
var client = new mySoapService.serviceClient();
var request = new mySoapService.GetSomeFancyDataRequest(1, "abc", 234);
var result = await client.GetSomeFancyDataAsync(request);
//check if GetSomeFancyDataResult exists
if (result == null || result.GetSomeFancyDataResult == null)
return null; // exit here, abort!
// process the results when data is found in the result ??
var results = result.GetSomeFancyData.Select(x => x.MyFancyFieldOne);
推荐阅读
- matlab - 在 maxflow 中显示流量守恒的邻接矩阵
- javascript - jquery-ui-rotatable的销毁方法不起作用
- python - 使用 python 在 selenium 中使用下拉菜单选择项目
- wifi - 解释 802.11 吞吐量的降低
- python - 使用 Python 或 Matlab 查找图像的属性并与原始图像进行比较
- python - 运行位于 startTask 文件夹中的 R 脚本源代码的任务
- javascript - 序列化 li 的数据以通过 post 方法 ajax 发送
- javascript - 带有磁卡读卡器 javascript 问题的条纹元素
- sql - 如何使用列的最大值插入?
- angular - Highchart Y轴点未显示