##質問
データのキューにデータがたくさんあって、それを一つずつ取り出して処理します。
このとき、各データの処理でTask.Wait(6000)を行うのですが、これはよくないコードですか?
キューにオブジェクトが10万個ある場合、10万個のオブジェクトの全てが順番にTask.Wait(6000)を実行し、すぐにキューは空っぽになります。60秒後にキューは空っぽのままで10万個のオブジェクトで実際の処理が一斉に(Taskの仕様まかせ)処理を再開するようなイメージです。
パフォーマンスとかはいいのですが、10万ものタスクを生成したらメモリを食い過ぎたりしないでしょうか?
100万、1000万と増えていった場合はどうなるでしょうか?
お願いいたします。
##補足
前に同期のコードを非同期にしたときにoutofmemoryが発生したため質問しました。
そのときはイベントに登録されるメソッドを書いていたのですが、メソッドの処理が早く終わって呼び出し元に戻らないといけないという状況になり、元々のメソッド内の処理を丸ごとawait Task.Runの中に入れたのですが、そのときにその例外が起きました。
##追記
すみません。Task.Delay()でした。それを行ったあと、await Task.Delay(6000)を行ったあと、データの送信などの処理をしてます。そんなメソッドをもつオブジェクトがいて、そのオブジェクトをキューからばんばん取り出してそのメソッドを呼んでます。
##追記その2
ちなみにキューの処理に影響があったりしますか?別スレッドだからないのでしょうか?
##追記その3
やりたいことをちゃんと書かずにすみません。やりたいのはキューからとってきたオブジェクトのうち、一部を6秒またせるかんじです。
キュー自体はデキューを延々と繰り返し、データを受信すると別スレッドからエンキューもされるので、多分並列処理は違います。
同期で待機するとその間キュー自体が止まっちゃうので、待つやつに関してはawait Task.delay(6000)したいです。
待つやつ以外に待たないオブジェクトもキューに入ってます。
待つやつ・待たないやつはデータ受信時にそれぞれ生成してキューに入れてます。
継承的には「やつ」抽象クラスと「待つやつ」「待たないやつ」具象クラスがいます。
キューは「やつ」のキューです。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。