はここマルチスレッド環境でクラスインスタンスの値が壊れているのはなぜですか?
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 100; i++)
{
Thread thread = new Thread(new ThreadStart(()=> SimpleClass.Instance.weird.SetHello(i)));
thread.Start();
}
Console.Read();
}
}
interface IClass
{
WeirdClass weird{ get; set; }
}
class SimpleClass : IClass {
public static SimpleClass Instance = new SimpleClass();
public WeirdClass weird{ get; set; }
public SimpleClass()
{
weird= new WeirdClass();
}
}
class WeirdClass
{
public int hello;
public void SetHello(int i)
{
this.hello = i;
Console.WriteLine(this.hello);
}
}
我々はWeirdClassの「ハロー」の値がマルチスレッドで正しく行われていません見ることができ、値は単に静的インスタンスのようですが、そうではありません、単純なコードです。
おそらく、魔法はSimpleClass.Instance.async
で起こるかもしれません。ありがとう
[ask]と明示してください。それはどのように「腐敗していますか?あなたは1つの 'WeirdClass'インスタンスで作業していることを認識していますか? – CodeCaster
コンテキストキーワードであるので、識別子として 'async'を使用することについて強くお勧めします。 –
とにかく[クロージャへのアクセス(2)](http ://stackoverflow.com/questions/304258/access-to-modified-closure-2)。 – CodeCaster