【发布时间】:2020-03-05 23:56:26
【问题描述】:
背景
目前我有一个与 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。帮忙?
【问题讨论】:
-
你试过
if (task.Result == null || etc.)。调用task.Result.Equals(null)似乎是错误的。如果您查看示例object.Equals覆盖此处docs.microsoft.com/en-us/dotnet/api/…,它会检查null,但这似乎不是我所指望的 -
等一下...如果
task.Result为空,那么task.Result.Equals(null)应该抛出一个空引用异常。您看到的是 没有按预期工作 行为吗? -
@Nkosi:嗯,不。如果
task.Result为空,则task.Result.Equals(null)(if中的第一个条件)等价于null.Equals(null)。除非.Equals被实现为扩展方法(我很确定它不是),否则会抛出 -
@AussieJoe - 不要气馁。即使问题写得很好,有些人也会投反对票。
-
@AussieJoe 请不要破坏您自己的帖子,通过包含答案使其不再是问题。欢迎您发布答案作为答案。如果您认为该帖子应该被删除,您必须标记以引起版主注意并解释为什么必须删除它。
标签: c# .net async-await task-parallel-library