c# - 异步操作后变量未填充
问题描述
我有一个result
设置为null
. 然后将此变量传递到this.GetAsyncData
执行异步操作的位置,该操作results
用数据填充变量。
public async Task<IActionResult> MyAction()
{
IEnumerable<object> result = null;
string fileName;
switch (type)
{
case type1:
fileName = await this.GetAsyncData(result);
break;
default:
throw new Exception();
}
await _call.External(result, fileName);
}
private async Task<string> GetAsyncData(IEnumerable<object> result)
{
result = await anotherCall();
return "NewFileName";
}
但是,就我而言,当它到达时_call.External(result, fileName);
,result
总是null
。即使,当我单步执行时this.GetAsyncData
,它也会填充数据。
解决方案
您没有返回结果。即,您将其用作输入参数。在普通方法中,您可以使用out
参数来返回此结果,但在这里,您必须使用常规任务返回值。您可以使用包含文件名和可枚举值的值元组来做到这一点:
private async Task<(string, IEnumerable<object>)> GetAsyncData()
{
IEnumerable<object> result = await anotherCall();
return ("NewFileName", result);
}
用法:
public async Task<IActionResult> MyAction()
{
switch (type)
{
case type1:
var (fileName, result) = await this.GetAsyncData();
break;
default:
throw new Exception();
}
await _call.External(result, fileName);
}
顺便说一句:您可以简单地使用 anIEnumerable
而不是IEnumerable<object>
.