首页 > 解决方案 > 异步操作后变量未填充

问题描述

我有一个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,它也会填充数据。

标签: c#.net

解决方案


您没有返回结果。即,您将其用作输入参数。在普通方法中,您可以使用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>.


推荐阅读