私は常に10msごとに入力を受け取り、Queue<T>
にデータを追加し、別のスレッドがデキューして処理を行い、すべてがうまく流れ続けるようにファイルに書き込むメソッドを持っているとします。これは、処理に10ms以上かかるためです。タイムクリティカルな処理にasync/awaitとTaskを使用する違いは何ですか?
このメソッドを.Net 4で更新するには、新しいスレッドが作成されるように長期実行オプションで新しいタスクを開始します。 BlockingCollection<T>
にデータを追加するにはBlockingCollection
GetConsumingEnumerable
を呼び出してデータを処理し、これをファイルに書き込みます。
まず、新しいスレッドを作成するためにタスクが必要かどうかは私には分かりませんが、私の無知のために、これは最も有益な方法です。データが入ってきたときに、処理を行い、その後、await FileStream.WriteAsync
を呼び出すasync
でマークされたメソッドを呼び出すように私はおそらく、再びこれを書き換えることができasync
とawait
キーワードの導入により、第二に
。これにより、10ms離れたところから来るデータが正常に処理され、バックログがないことが保証されますか?私は、これらの新しいキーワードが新しいスレッドを作成するのではなく、何らかの形でタイムリーに実行を処理することを発見しました。
私のシナリオでは、これは私にとって良いことでしょうか、長時間実行されているタスクとBlockingCollectionで新しいスレッドを作成することに固執すべきですか?
あなたの質問は不明です - 「FileStream」はどこに入っていますか?あなたの全体的なシナリオを理解してください。また、入力が実際に到着するのと同じ速さで処理できるかどうかも明記してください。 –
@JonSkeet FileStreamは、新しい非同期関数を使用してファイルに書き込んでいることを示すものです。別のスレッド/タスクで処理が行われる理由は、処理が10msより長くなるためです。これを示すために質問を更新しました。 – Jon