最近非同期メソッドを呼び出す際に問題が発生しました。ここ はコードです:非同期メソッドC#WhenAll issue
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のさまざまなプロパティが更新されます。それは安全ですか?
私は解決策を探していますが、それでも見つからないのです。 ありがとうございます。
すべてのタスクが完了しないことはありますか? – Magnus
'Func1'、' Func2'、 'Func3'は何をデバッグしましたか? 'return storage' _never_がヒットした場合、それらのタスクの少なくとも1つが完了していない可能性が高いからです。 –
コメントありがとうございます。これは私が同期的にFunc1()を呼び出すときに使用されました。 Funct2(); ..その後、私はこのアプローチに切り替え、それはもはや動かない。そして、私はそれらの機能に間違いがないと思います。しかし、私はそれらをもう一度確かめるでしょう。 –