2012-04-08 24 views
6

スレッドごとに{get; set;}リストを動的に設定する必要があるクラスがあります。私はまた、このクラスをスレッディングを使って10回かそれ以上異なる時間と呼んでいます。Listを作る方法

public static List<string> MyList {get;set;}

私はこれが危険であると言われてきたとして、しかし、スレッドへの新たなんです。私が持っている質問は、スレッドごとにMyListのインスタンスを作るにはどうすればいいですか?

例が素晴らしいです!

+1

これは何のためのインスタンスです。本当にスレッドごとにインスタンスを持つ必要がある場合は、スレッドIDまたはスレッドローカルストレージに従ってリストの辞書を保持してください。 –

+1

何をしようとしていますか?単一の静的フィールドを持つとスレッドごとにインスタンスを持つことには大きな違いがあります。スレッドの問題のために変更するだけではありません。また、スレッド間でのデータの共有方法にも影響します。 –

+0

@MarkByers私がしたいことは、私がそれぞれの並列を使うときです。以前の 'void'の結果に基づいて特定のmysqlクエリを実行します。これらの結果は、その後、私の機能の実行に使用するクラスの残りの部分である 'MyList'を作成します。 –

答えて

8

ThreadStatic属性を使用します。

[ThreadStatic] private static List<string> _myList; 

public static List<string> MyList { 
    get { return _myList; } 
    set { _myList = value; } 
} 

また、通常、コレクションを管理するクラスを含む方が優れています。これは、外部から見えるセッターと、コピーまたは読み取り専用のコレクションを返すゲッターを意味しません。

しかし、これは、あなたが意図している効果がない可能性があります。各スレッドには、コレクションの独自のコピーがあります。あなたが必要とするのは、のロックを見るか、あなたのデザインを考え直すことです。

+0

各スレッドに独自のコピーが含まれていて、一度しか設定されず、agianに設定する必要はありませんが、これはスレッドごとに一意でなければなりません –

+0

@Mike: 'ThreadStatic'は、 。 –

+0

これは行くだろう、ここで私は[ThreadStatic]が明らかに[ThreadStatic]がMyListの最後で終了することを知っているコードを開始し、コードの残りの部分に影響を与えることを愚かな質問かもしれません –

関連する問題