Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查基础异步任务.Result是否为null 背景_C#_.net_Async Await_Task Parallel Library - Fatal编程技术网

C# 如何检查基础异步任务.Result是否为null 背景

C# 如何检查基础异步任务.Result是否为null 背景,c#,.net,async-await,task-parallel-library,C#,.net,Async Await,Task Parallel Library,目前,我有一个.NETCore3.1WebAPI方法,它与SOAP服务异步通信。当我运行我的任务并得到一个响应时,它通常是有效的,但有时SOAP服务会发送一个带有空响应的200 Ok()。这对我来说是一场浩劫。如何检查基础结果/GetSomeFancyDataResult是否为null 因为GetSomeFancyDataResult是“result”下的结果,所以我得到一个有效的“result”,但“GetSomeFancyDataResult”为null,当我尝试检查它是否为null时,我得

目前,我有一个.NETCore3.1WebAPI方法,它与SOAP服务异步通信。当我运行我的任务并得到一个响应时,它通常是有效的,但有时SOAP服务会发送一个带有空响应的200 Ok()。这对我来说是一场浩劫。如何检查基础结果/GetSomeFancyDataResult是否为null

因为GetSomeFancyDataResult是“result”下的结果,所以我得到一个有效的“result”,但“GetSomeFancyDataResult”为null,当我尝试检查它是否为null时,我得到一个未实例化的错误

示例代码 我的问题 我的问题是,这不符合预期

// how to check if GetSomeFancyDataResult exists ?
if (task.Result.Equals(null) || task.Result.GetSomeFancyDataResult.Equals(null))
    return null; // exit here, abort!

也许我已经盯着这个看太久了。我在这里俯瞰什么?我已经搜索了SO和interwebs,还没有找到如何正确地检查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);

考虑等待结果并对返回值执行检查

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

使用@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;


您是否尝试过
if(task.Result==null | |等)
。调用
task.Result.Equals(null)
似乎是错误的。如果您查看示例
object.Equals
override,它会检查
null
,但这似乎不是我所期待的。。。如果
task.Result
为null,则
task.Result.Equals(null)
应引发null ref异常。是不是你看到的行为不符合预期?@Nkosi:um,不是。如果
task.Result
为null,那么
task.Result.Equals(null)
(如果
If
)中的第一个条件等同于
null.Equals(null)
。除非
.Equals
被实现为一个扩展方法(我很确定它不是),否则它将throw@AussieJoe-尽量不要气馁。有些人甚至在一个问题写得很好的时候也会投反对票。@AussieJoe请不要破坏你自己的帖子,让它不再是一个包含答案的问题。欢迎您发布答案作为答案。如果您认为应该删除该帖子,您必须标记以引起版主的注意,并解释为什么必须删除该帖子。您是否尝试过
If(task.Result==null | |等)
。调用
task.Result.Equals(null)
似乎是错误的。如果您查看示例
object.Equals
override,它会检查
null
,但这似乎不是我所期待的。。。如果
task.Result
为null,则
task.Result.Equals(null)
应引发null ref异常。是不是你看到的行为不符合预期?@Nkosi:um,不是。如果
task.Result
为null,那么
task.Result.Equals(null)
(如果
If
)中的第一个条件等同于
null.Equals(null)
。除非
.Equals
被实现为一个扩展方法(我很确定它不是),否则它将throw@AussieJoe-尽量不要气馁。有些人甚至在一个问题写得很好的时候也会投反对票。@AussieJoe请不要破坏你自己的帖子,让它不再是一个包含答案的问题。欢迎您发布答案作为答案。如果你认为这篇文章应该被删除,你就必须提醒版主注意,并解释为什么必须删除。这是有效的。我已经盯着它看了太多太久了。非常感谢。对于空合并运算符也是一个很好的机会
if(result?.GetSomeFancyDataResult==null)
或者,假设最后一行应该是相同的属性并且刚刚键入,您可以跳过if并只返回result?.GetSomeDancyDataResult?.Select(result=>result.myFancyFieldDone)@MattJohnson品脱哦,太辣了@恩科西:如果我改变等待时间,这实际上是行不通的。如果我像我的例子中那样保持它,它确实有效。干杯这起作用了。我已经盯着它看了太多太久了。非常感谢。对于空合并运算符也是一个很好的机会
if(result?.GetSomeFancyDataResult==null)
或者,假设最后一行应该是相同的属性并且刚刚键入,您可以跳过if并只返回result?.GetSomeDancyDataResult?.Select(result=>result.myFancyFieldDone)@MattJohnson品脱哦,太辣了@恩科西:如果我改变等待时间,这实际上是行不通的。如果我像我的例子中那样保持它,它确实有效。干杯