여러 스레드에서 일부 작업을 수행하려고하지만 그 결과는 스레드를 관리하지 않아야합니다. 예를 들면 :여러 스레드에서 함수의 결과를 얻는 방법
이 코드에 의해private void button1_Click(object sender, EventArgs e)
{
for (int j = 0; j < 2; j++)
{
ThreadPool.QueueUserWorkItem((o) =>
{
var result = Function1();
BeginInvoke(new Action(() =>
{
Function2(result);
})
);
}
);
}
}
private int Function1()
{
Random rnd = new Random();
Thread.Sleep(1000);
int k = rnd.Next(10, 20);
return k;
}
private void Function2(int i)
{
string s = i.ToString();
Thread.Sleep(2000);
s += i.ToString();
MessageBox.Show(s);
}
, Function1
여러 스레드에서 실행하고 function2()
은 기능 1에서 결과를받은 후 결과 값 몇 가지 일을한다.
그러나 Function1()이 여러 스레드에서 실행될 때 result
이 변경되었으므로 Function2
은 결과가 무시되기 때문에 양호하게 작동하지 않습니다. 어떻게 해결할 수 있습니까? 배열에서 Function1의 반환 값을 저장하고 하나씩 관리해야한다고 생각합니다. 거기에 더 좋은 방법이 있습니까?
작동하지 않았습니다. 결과는 마지막 것입니다. 다른 방법이 있습니까? – Elahe
@Elahe 당신은 분명하지 않습니다. 마지막 하나? 이것은 단순히 백그라운드 작업으로 시작하는 각각의 결과에서'Function2'를 호출해야합니다. 그래서 마지막 결과 만 얻는다면 그것은'Function2' 메쏘드가 이전 결과를 덮어 쓰기 때문입니다. – Luaan
귀하의 답변으로 제 질문을 편집합니다. 하지만 messageBox는 같은 값을 보여줍니다. – Elahe