最近我在调用异步方法时遇到了问题。 这是代码:
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/