申し訳ありませんが、私はこれを短く正確に保ちたいと思います。大量のHttpWebRequestsを完成させる最も効率的な方法を見つけようとしていますが、私はTask.WaitAll関数を使用して、すべてのタスクが完了するまで待機します。タスク(アクション)を非同期タスクにするには余計ですか?たぶん私は、コード内で、より良い自分自身を説明することができますので、非常にシンプルタスクを使用した非同期プログラミング
for (int i = 0; i < 50; i++)
{
taskList.Add(Task.Run(() => DoSomething()));
}
Task.WaitAll(taskList.ToArray());
[OK]を、私はThreadPoolの内で利用可能なスレッドでdoSomethingのメソッドを実行しますループのために、今のは、どのように私ができる2人の異なるルックスを取らせています私はすでに、すでにそれはです意味Task.Run機能のdoesntを切っdoSomethingの機能を送っていた場合
public void DoSomething()
{
Send off the HttpWebRequest here, with no awaits or any async programming
}
OR
public Task<ResponseData> DoSomething()
{
Write the request here that awaits for responses, streams etc
}
このdoSomethingの()関数を実装ThreadPoolで独自のスレッドを実行していますか? DoSomething関数を実際のタスクにして、そのスコープ内でawaits/async機能を実装することは冗長になりますか?もっとリソースを無駄にしてしまうのではないでしょうか?
これ以上の文脈で答えることはできません。 'DoSomething()'はあなたのHTTPリクエストよりも何かをしますか?要求が行われた後に何かをする必要がありますか?リクエストを行うだけであれば、非同期リクエストAPIを使用し、リクエストを表す 'Task'を' DoSomething() 'から返し、' Task.Run()を使うのではなく、リストに_that_を追加するだけです。 '。 'DoSomething()'がリクエストの後に処理する処理が増えている場合は、それを行う必要がありますが、 'wait 'することができます。いずれにしても、 'Task.Run()'は必要ないでしょう。しかし、あなたはコードを共有していないので、誰が話すことができます。 –
タスクを返す関数は、タスクを返す関数をTask.Runに渡しているかのように、スレッドプール上のスレッドに既にアクセスしていますか? だからTask.Run(()=> DoSomething());タスクを返す関数を作成するのと同じでしょうか? –
_ "タスクを返す関数は既にスレッドプール上のスレッドにアクセスしていますか?" - 必ずしもそうである必要はありません。しかし、非同期で動作しています。これは上記のコードで気にしていることです。 "非同期"と "同時"または "スレッド"を混同しないでください。 2つは密接に関連していますが、同じではありません。アクティブなスレッドに依存しない非同期メカニズムがあります。 –