나는 스레드하기로 선택한 응용 프로그램이 있습니다. 이 배후의 목적은 응용 프로그램의 속도를 높이기 위해 여러 스레드를 동시에 실행하는 것입니다.C# 스레드 비동기 처리
현재 응용 프로그램 설정을 반복하고 각 설정에 대한 스레드를 만든 다음 각 설정을 시작하고 모두 참여할 때 알릴 수 있도록 가입하십시오.
이 작업을 수행 할 때 각 스레드는 동 기적으로 실행되어 목적을 달성하지 못합니다.
조인을 제거하기 위해이를 변경할 수 있지만 모든 스레드가 완료 될 때이를 확인할 수 없습니다 (모두 완료되면 실행할 단일 프로세스가 있습니다).
스레딩이 나를위한 것이 아니라, 스레딩 작업이나 병렬 처리 작업을 더 많이보아야한다는 생각이 들기 시작합니다.하지만이 중 하나의 복잡성에 대해서는 확신 할 수 없습니다. 내가 전에 하나 메커니즘을 사용 (그리고 유일한 스레드 다뤄) 아래
현재이 하나씩 스레드를 실행, 현재 나의 스레드foreach (SettingsProperty value in Properties.Settings.Default.Properties)
{
//parse out the line in the settings
if (value.Name.ToString() != <<criteria>>)
{
//this is one that we want to do something with
sett = value.DefaultValue.ToString().Split(stringSeparators, StringSplitOptions.None);
//set the directory
Directory.CreateDirectory(<<directory>>);
//fire the thread to retrieve the image form the url
ThreadWithState tws = new ThreadWithState(<<parameters>>);
Thread t = new Thread(new ThreadStart(tws.ThreadProc));
t.Start();
t.Join();
}
}
UploadFiles();
급부상 코드 조각이며, 다음 마지막 프로세스를 실행하지 않은 . t.join 호출을 제거하면 비동기 스레드가 실행되지만 모든 스레드가 완료되기 전에 업로드가 실행됩니다.
나도 (I이 작동 생각하지만, 더 이해가 없음) 또는 일부 threading.tasks 내가 그렇게 기능을 구현하는 Parallel.ForEach를 구현하는 모든 스레드가 끝날 때까지 기다리거나 이 코드를 변경할 수있는 방법 (나는 또한 작동 할 수 생각하지만 이해가 없다)를 Task.WhenAll 방법
왜 't.Join()'을 부르시겠습니까? –
귀하의 질문이 너무 광범위합니다. 여러 가지를 동시에 실행할 수있는 유효한 방법이 많이 있습니다. 귀하의 코드는 그러한 방법을 시도하지 않습니다. 방금 시작한 스레드에서 즉시 Join()을 호출하면 현재 스레드가 완료 될 때까지 다른 스레드를 시작하지 않습니다. 다른 스레드를 시작하기 전에 기다리지 않으려면 ** 기다리지 말고 **. –
올바른 도구가 무엇인지 알면 비동기 워크 플로우를 구축 할 수 있으며이를 수행하는 방법을 모를 수 있습니다. 그래서 * 어떻게하는지 배우십시오 *. 튜토리얼 사이트가 아닙니다. 병렬 및 비동기 워크 플로우에 대한 많은 자습서가 있습니다. 가서 하나가! 이런 IO 바인딩 작업의 경우 비동기 워크 플로에 대해 배우기 시작합니다. 여러 스레드를 포함 할 필요가 없습니다. –