c# - 类变量未在异步方法中更新

标签 c# winforms async-await

我有一个简单的异步方法,它从外部 API 获取对象并将其添加到类级别的列表中。问题是,当调用在其自己的方法中被隔离时,该对象不会添加到我的列表中。但是,如果我将调用放入 Form1_Load 方法中,列表将正常填充。

有人可以帮忙解释一下为什么会发生这种情况吗?

public partial class Form1: Form
{
    private ApiClient client;
    private List<Object> list;

    public Form1()
    {
        InitializeComponent();

        client = new ApiClient();
        list = new List<Object>();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        GetObject();

        //Adding the call here populates the list successfully
        //list.Add(await client.GetResourceAsync<Object>(1));
    }

    private async void GetObject()
    {
        list.Add(await client.GetResourceAsync<Object>(1));
    }
}

最佳答案

它是异步的。它最终会更新。如果您想在执行某些操作之前确保它已更新,请等待调用。

private async void Form1_Load(object sender, EventArgs e)
{
    await GetObject();  //Add await here
}

private async Task GetObject() //Change the return type to Task so you can await it
{
    list.Add(await client.GetResourceAsync<Object>(1));
}

关于c# - 类变量未在异步方法中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73226887/

相关文章:

javascript - NodeJs : Multiple loop of HTTP requests execute simultaneously

c# - 第三方类的 TypeConverter 属性

wpf - 我应该如何在 .NET Windows 应用程序中使用 BizTalk 的业务规则引擎?

visual-studio - Visual Studio 属性窗口搜索

c# - 等待 PushModalAsync 表单以 xamarin 表单关闭

javascript - 函数返回 promise 对象而不是值(异步/等待)

c# - 字符串如何存储在对象数组中?

c# - Dictionary<string, List<string>> 的所有值都与最后输入的值相同

c# - LINQ 模拟 : accessing method parameters

c# - 当 DropDownStyle 为 Simple 时,ToolStripCombobox 显示在屏幕左上角