最近我遇到了调用异步方法的问题。 以下是代码:
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对象的不同属性,这样做是否安全?
我已经搜索了解决方案,但仍未找到。谢谢。
Func1
、Func2
和Func3
的功能吗?如果return storage
永远不会被触发,那么很可能是因为其中至少一个任务没有完成。 - René VogtFunc1()
和Func2()
返回什么对象? - Denis Krasakov