-1

순수 실험 이유로, 나는 2 작업 및 2 개 정적 변수 glo_aglo_count가 C#을작업이 순차적으로 실행되고 있지 동시에

Task의를 사용하여 사이비 - 난수 생성기를 작성하려합니다. glo_a은 최종 결과 (7 비트 무작위 이진 정수)를 유지해야합니다.

public static int glo_a = 0, glo_count = 6; 

Private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    Task task = new Task(() => this.display(1)); 
    Task task2 = new Task(() => this.display(0)); 

    task.Start(); 
    task2.Start(); 

    Task.WaitAll(); 
    textBox1.AppendText("\n" + glo_a); 
} 

public void display(int j) 
{ 
    for (; glo_count >= 0; glo_count--) 
    { 
    glo_a += j * (int)Math.Pow(10,glo_count); 
    } 
} 

private void refreshbutton_Click(object sender, RoutedEventArgs e) 
{ 
    /* reset the original values*/ 
    glo_a = 0; 
    glo_count = 6; 
    textBox1.Text = ""; 
} 

제가하는 데 문제는 task 처음 실행하는이며 task2는 매번 시작되기 전에 완료됩니다. 더 나은 아직

Random r = new Random(); 
r.Next(2); 

나 :

Random r = new Random(); 
byte[] randomBytes = new byte[7]; 
r.NextBytes(randomBytes); 

어떤 경우에 당신이 할 수있는 이상한 요구 사항이있는 가정, 당신은 단지이 사용하는 "비트"를 생성하지 않는 이유

+0

할 일이 거의 없으므로 거의 놀라운 일이 아닙니다. –

답변

3

는 기회가 다른 후 하나를 실행하게 될 겁니다 있습니다 할 약간이 있고, 처음 작업 1 시작한 이후, 그 첫 번째 실행하기가 가능성이 높습니다.

다른 답변에서 말한대로 Random 클래스를 사용하십시오.

2

내가 물어 봐도 당신이하고있는 일을, 그들이 순차적으로 운영하고 있는지 확신합니까?

두 번째 작업을 시작하기 전에 첫 번째 작업이 종료 될 가능성이 더 높습니다. 어떤 경우

,이 같은 일이 될 것입니다,하지만 당신은 시도 할 수 있습니다 : 당신은 당신이 무엇을 사용하기 필사적 경우

Task.WaitAll(
    new Task(() => this.display(1)), 
    new Task(() => this.display(0)) 
); 

, 당신은 작업이 먼저 시작을 결정하는 임의의 생성을 할 수 : 작업으로

Random r = new Random(); 

Task task = new Task(() => this.display(1)); 
Task task2 = new Task(() => this.display(0)); 
Task[] tasks = new [] { task, task2 }; 

/* Only supports 2 tasks */ 
int firstTask = r.Next(2); 

tasks[firstTask].Start(); 
tasks[firstTask^1].Start(); 

Task.WaitAll(); 
+0

이것은 단지 학습 일이었습니다. 기본적으로 목표는 임의의 nos를 생성하는 것이 아닙니다. 나는 TPL의 기능을 배우고 싶었다. 그러나 TPL은 공유 된 정적 변수 (나는 짐작) 때문에 작업을 순차적 실행으로 예약하고있다. simltaneously 그들을 실행하는 방법이 있습니까? p.s. (i5 프로세서를 가지고 있기 때문에 문제가 발생하지 않습니다.)) – Sagar

+1

순차적 실행이 아니라고 할 수 있습니다. 첫 번째 작업이 너무 작아서 너무 빠르거나 적어도 두 번째 작업 전에 항상 처리되고 있습니다. 비동기 적이기 때문에 (즉, 동시에 실행 됨) 반드시 불확실한 순서로 시작한 것은 아닙니다. 우리가 동시에 한 트랙에서 달리기는하지만 처음부터 시작하면 우리는 동시에 둘 다 달리고 있어도 매번 끝날 수 있습니다. 나는 당신이 어떤 Task가 처음 시작 하는지를 어떻게 바꿀 수 있었는지에 대한 업데이 트를 올렸지 만 분명히 그 목적을 상실했다. –

+0

음 ... 고마워. 하지만 내가 말했듯이, 내 목표 wasnt 랜덤 num 세대 ... 난 tpl 작동 방법을 배우고 싶었지만 ...하지만 제 생각에 우르 오른쪽 내 첫 번째 작업이 끝나기 전에 끝나는 ... 그리고 난 잠이 그것을 해결할 것입니다 :) – Sagar

관련 문제