2016-05-09 15 views
0

私はasyncを初めて使っています。その答えが明らかな場合は事前にお詫びします。 MVCでは、返されるデータに影響を与えないタスク(例:analytics)を実行したい場合は、async voidが役立ちますか、まったく異なるスレッドを起動できますか?私が正しくasyncを使用して理解していれば、すべてのタスクが完了するまで(実際のアクションはasyncと表示されていなくても)結果を返さないため、このケースでは役に立たないでしょう。MVCのアクションでの非同期の使用

asyncを使用すると、マルチスレッドを強制することなく同時実行を可能にすることはできますか?

+0

asp.net Webサイトでジョブを実行するのではなく、他のサービスで実行したいかもしれません。 –

+0

'async'はマルチスレッドとわずかに関連しています。あなたはスティーブン・クレアリーのブログを読んでください。しかし、私はあなたが「データに影響を与えない」という意味を理解していません... – Aron

+0

Webサービスに分析データを送信する必要があります。発生したときに気にせず、結果がクライアントへの応答に影響しないはずです。 –

答えて

3

Asyncは、待機状態に入るときにスレッドをプールに戻すだけです。これは通常、ローカル(ファイルシステム上のファイルの読み書き)またはリモート(APIまたはデータベースクエリに対するWeb要求など)のI/O操作で発生します。正確に分かっているように、マルチプロセッシングやバックグラウンド処理とはまったく関係がありません。どちらも完全に別個の概念です。

新しいスレッドを生成する限り、実際にはWebアプリケーションのコンテキストでは非常に危険です。 Webアプリケーションはスレッドを手動で生成する必要はありません。しかし、依然として要求パイプラインのコンテキスト内でスレッドを実行する必要があるため、バックグラウンドでは何も実行しないため、スレッドは関係なく役立ちません。

バックグラウンドで、そして要求 - 応答サイクルの外で本当に何らかのタスクを処理する必要がある場合は、その目的のためにツールを利用する必要があります。調べるべき良いものは、RevaleeHangfireです。