List 初始化中异步方法调用出现意外并发

问题描述 投票:0回答:1

我编写了一个方法,用异步方法返回的对象填充列表。

public async Task<ObjectToReturn> GetObjectToReturnAsync()
{
    var objectToReturn = new ObjectToReturn
    {
        List1 = [
            await AsyncMethod1("A", null),
        ],
        List2 = [
            await AsyncMethod1("B", false),
            await AsyncMethod1("C", false),
            await AsyncMethod1("D", false),
            await AsyncMethod1("E", false),
        ],
        List3 = [
            await AsyncMethod1("B", true),
            await AsyncMethod1("C", true),
            await AsyncMethod1("D", true),
            await AsyncMethod1("E", true),
        ]
    };

    return objectToReturn;
}

方法

AsyncMethod1
执行一些数据库查询,我注意到查询是同时运行的。

为什么指令不按顺序执行?

如何解决?

c# object asynchronous concurrency list-initialization
1个回答
1
投票

我创建了一个小提琴,显示方法按预期顺序执行:https://dotnetfiddle.net/PC8Xo0

输出为:

A 
B False
C False
D False
E False
F True
G True
H True
I True

这表明异步方法是按照它们的编写顺序等待的。

您提到的问题可能在代码的其他地方。

© www.soinside.com 2019 - 2024. All rights reserved.