7

私はマルチスレッドの基本的な cs を主に理解していますが、アプリケーションで単純なタイマー以外のことをする必要はありませんでした。マルチスレッドアプリケーションの操作方法を紹介し、基本を説明し、おそらくより難しいもののいくつかを提示する優れたリソースを知っている人はいますか?

4

5 に答える 5

23

これは、Joseph Albahari による優れた無料リソースです。C# でのスレッド化

于 2008-09-08T14:59:30.037 に答える
11

2つの素晴らしい記事:

マルチスレッドアプリについてすべての開発者が知っておくべきことマルチスレッドアプリ
でのローロック技術の影響を理解する

この記事はあなたが具体的に探しているものではありませんが、一般的に役立つことを願っています(つまり、関連していて、非常によく読んでいます)。

フリーランチは終わった:ソフトウェアの並行性への根本的な転換

于 2008-09-08T15:06:37.803 に答える
5

.Netでスレッドを同期する基本的な方法は4つあります。

  • BackgroundWorkerコントロール
  • WaitHandles
  • コールバック関数
  • ASyncResultオブジェクトのポーリング

一般的には、そのリストの一番上から始めて、下に向かっていきます。つまり、最初に、バックグラウンドワーカーのコントロールが状況に適しているかどうかを確認してください。ただし、ほとんどの場合、Windowsフォームを想定しており、新しいスレッドを1つだけ生成していることを前提としています。

次に、ウェイトハンドルを試してください。ウェイトハンドルは、複数のスレッドを一緒に調整するのに適しています。それらをすべてキックオフしてすべてが終了するのを待つことができます。または、特定の数をアクティブに保ちたい場合は、1つだけを待って、終了時に次の数をスポーンし続けます。または、1つのスレッドがはるかに早く終了することを知っている場合は、スレッドが終了するのを待って、少し作業を行ってから、残りのスレッドが終了するのを待つことができます。

たとえば、追加のスレッドを1つだけ生成し、それが完了するまでブロックしたくない場合、ウェイトハンドルは少し多く見えるかもしれません。次に、コールバックを使用して、指定した関数がスレッドの完了と同時に呼び出されるようにすることができます。

最後に、何らかの理由で上記のいずれも機能しない場合にのみ、ポーリングにフォールバックできます。

.Netで新しいスレッドを取得するための5つの異なる方法を、大まかに順番に考えることができます。

  • 通常、winformsイベント(BackgoundWorkerを含む)の結果として作成されたOS。
  • Obj.Begin ___()/ End ____()。特定のCLRクラスには、これらの非同期メソッドがすでに定義されており、使用可能な場合は明らかにそれらを使用する必要があります。
  • ThreadPool.QueueUserWorkItem()。ほとんどの場合、これを使用して独自のスレッドを作成します。
  • Delegate.BeginInvoke()/ EndInvoke()。この方法で任意のメソッドをラップできます。
  • Thread.Start()。この方法でそれを行うこともできますが、最近、QueueUserWorkItemが機能しない場合は、デリゲートメソッドの方がおそらく優れているということを読みました(現在はリンクがありません)。
于 2008-09-08T15:02:55.830 に答える
2

.NETのマルチスレッドについて学ぶための優れたWebリソース:

于 2008-09-08T15:09:44.300 に答える
1

この件に関して私が知っている最高のリソースの 1 つは、「C# でのスレッド化」の本です: http://www.albahari.com/threading/

マルチスレッド アプリケーションをプログラミングするために .net 開発者が理解する必要があるすべての概要を説明しています。

于 2008-09-18T09:49:58.510 に答える