.NETでスレッドの「もの」について議論したいと思います。 他の言語/フレームワークでは非同期呼び出しの処理方法が明確に限定されていますが、.NETでこれを行うには無数の方法があります。 私がここでやろうとしているのは、ある種の「事例のベストプラクティス」を定義しようとすることです。言い換えれば、いつどのトレッドアプローチを使用しますか?Discussion:.NETでのスレッディング
我々は我々のコード実行中の非同期を得ることができますどのような方法の列挙で始めることができます:
- スレッド(新しいスレッド)
- のThreadPool(ThreadPool.QueueUserWorkItem)
- のBackgroundWorker(BackgroundWorker.RunWorkerAsync)
- デリゲート(Delegate.BeginInvoke)
- タスクのParallelsライブラリ
- パラレルクラス(パラレル。 foreachの)
[Iは、任意のを忘れてしまったのか?]
をここで私が使用してどのようなタイプを決定する方法である:
スレッド - 通常、私はスレッドを完全に制御する必要がある、例えばサービスのメインスレッド。
のThreadPool - 高い優先度を持っていない短いタスク - UIプロジェクト - - >積載私たちはUIにIPCを接続していると私はちょうどlosenこれらの呼び出しは、UI
BackgroundWorkerのをブロックしないようにする必要があると言うことができます/スプラッシュ画面
委任は - 私は私のUIスレッド(ディスパッチャ/フォーム.Invoke)
タスクのParallelsライブラリと同期する必要があるusaually場合にのみ - まだ使用されていない、私は、デリゲートの道」のためにその偉大な交換を推測します"UIを同期させるため
パーallel - 複数のオブジェクトにいくつかのコードを実行する必要がある場合。別のサーバーからのメールのコレクションを持っているので、私はそれぞれのサーバーで何かする必要があります。
ここでは、どのように使用するかを決めるのですか?
このディスカッションがうまくいけば、セマフォトピックも追加したいと思います。
スレッド:あなたはすべてのスレッドIDEAL数を処理できることを十分に快適に感じるここ
よくある質問で書かれているように、Q/Aではディスカッションできません。残念ながら、そうではありませんが、それはその方法です... –
コミュニティWiki !?また、.NET 5の非同期キーワードについて議論したいかもしれません。 – mnemosyn
これはFAQでもWikiでもありません(まだ)。これまで私は私の個人的な経験を追加しました。私は、このような感覚的な話題をwikiに配置するためのいくつかのより多くの入力を楽しみにしていました。 – Jaster