相关疑难解决方法(0)

异步方法恢复后,值不会更新

看看这段代码:

public class SharedData
{
    public int Value { get; set; }
}

void button1_Click(object sender, EventArgs e)
{
    AAA();
}

async Task BBB(SharedData data)
{
    await Task.Delay(TimeSpan.FromSeconds(1));
    MessageBox.Show(data.Value.ToString()); //<---- I always see 0 here,
    data.Value = data.Value + 1;
}

async Task<int> AAA()
{
    SharedData data = new SharedData();
    var task1 = BBB(data);
    var task2 = BBB(data);
    var task3 = BBB(data);

    await Task.WhenAll(task1, task2, task3);
    MessageBox.Show(data.Value.ToString());  //<--- this does show 3
    return data.Value;
}
Run Code Online (Sandbox Code Playgroud)

这是一个GUI(Windows窗体)应用程序,这意味着只有一个线程执行每行代码.

BBB(data)无需等待即可快速调用所有调用.每次BBB调用进入BBB …

.net c# winforms async-await

7
推荐指数
1
解决办法
400
查看次数

标签 统计

.net ×1

async-await ×1

c# ×1

winforms ×1