如何检查底层异步 Task.Result 结果是否为 null

How to check an underlying async Task.Result result for null

背景

目前我有一个与 SOAP 服务异步通信的 .NET Core 3.1 WebAPI 方法。当我 运行 我的任务并获得响应时,它通常可以正常工作,但有时 SOAP 服务会发送 200 Ok() 和空响应。这对我造成了严重破坏。如何检查基础 Result/GetSomeFancyDataResult 是否为空?

因为 GetSomeFancyDataResult 是 "Result" 下的结果,我得到一个有效的 "Result" 但 "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);

使用@Matt Johnson-Pint 的建议对我来说最有效。

// 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));

// process the results when data is found in the result ??
var results = task.Result?.GetSomeFancyData?.Select(result => result.MyFancyFieldOne);

if (results == null)
    return null;

return results;