gpt4 book ai didi

c# - 异步方法 C# WhenAll 问题

转载 作者:太空狗 更新时间:2023-10-30 01:00:52 24 4
gpt4 key购买 nike

最近我在调用异步方法时遇到了问题。这是代码:

ClassA storage = new ClassA();// this is member of the class

async Task<ClassA> InitClassAObject(){ // async method of the class


List<Task> taskList = new List<Task>(); // create list task
taskList.Add(Func1());
taskList.Add(Func2());
taskList.Add(Func3());

await Task.WhenAll(taskList.ToArray()); // wait for all task done

return storage; // <--- this line never be hit
}

async Task Func1(){
await Task.Run(() =>{
//update property A of storage
//example storage.A = GetDataFromSomeWhere();
});
}

async Task Func2(){
await Task.Run(() =>{
//update property B of storage
//example storage.B = GetDataFromSomeWhereElse();
});
}
...

问题 1:方法 InitClassAObject() 永远不会返回。 “return never”处的断点命中。

问题 2:如果我调用多个异步方法并且它们更新对象 ClassA 的不同属性。这样做安全吗?

我四处寻找解决方案,但仍未找到。谢谢。

最佳答案

关于问题2:更新不同的属性是安全的。但是你应该记住,如果你在 Task1 中读取 SomeProperty 并在 Task2 中修改它结果将是不可预测的(Task1 可能在 Task2 写入之前或之后读取)

关于c# - 异步方法 C# WhenAll 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43064619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com