c# 병렬 처리 예제

개발자는 데이터 병렬 처리라고 하는 시나리오에 대해 병렬 클래스를 사용합니다. 다른 항목에 대해 동일한 작업이 병렬로 수행되는 시나리오입니다. 가장 일반적인 예는 컬렉션의 항목 또는 수행해야 하는 배열입니다. Parallel 클래스를 사용하여 컬렉션의 멤버 또는 모든 종류의 반복에 대한 작업을 병렬로 수행할 수 있습니다. 연결된 자식 클래스는 작업 만들기옵션.AttachedToParent 옵션으로 만들어집니다. 위의 예제에서 분리된 클래스는 AttachedToParent 옵션을 추가하여 연결된 자식 클래스를 변환할 수 있습니다. 연결된 자식 클래스의 예를 살펴보겠습니다: 이 상태는 작업 대리자에 대한 인수로 전달되고 Task.AsyncState 속성을 사용하여 작업 개체에서 액세스할 수 있습니다. 다음 예제는 이전 예제의 변형입니다. AsyncState 속성을 사용하여 lambda 식에 전달된 CustomData 개체에 대한 정보를 표시합니다.

이 예제에서는 Parallel.ForEach 루프를 사용하여 모든 System.Collections.IEnumerable 또는 System.Collections.Generic.IEnumerable 데이터 원본에 대한 데이터 병렬 처리기능을 활성화하는 방법을 보여 주며 있습니다. Parallel.Invoke 메서드는 임의의 문을 동시에 실행할 수 있는 편리한 방법을 제공합니다. 각 작업 항목에 대한 작업 대리자를 전달하기만 하면 됩니다. 이러한 대리자를 만드는 가장 쉬운 방법은 람다 식을 사용하는 것입니다. 람다 식은 명명된 메서드를 호출하거나 코드 인라인을 제공할 수 있습니다. 다음 예제에서는 동시에 실행되는 두 작업을 만들고 시작하는 기본 호출 호출을 보여 준다. 첫 번째 작업은 DoSomeWork라는 메서드를 호출하는 람다 식으로 표시되고 두 번째 작업은 DoSomeOtherWork라는 메서드를 호출하는 람다 식으로 표시됩니다. 여기서 차이점은 첫 번째 호출이 작업을 시작하고 한 번에 완료될 때까지 기다리는 직선 호출이라는 것입니다. 두 번째 예제에서는 작업을 시작하고 코드를 계속 실행하도록 할 수 있습니다. 호출 결과 없이 계속할 수 없는 지점에 도달하면 await 문을 사용하여 구합니다. await 문 다음에 오는 모든 것이 작업 연속으로 실행되도록 컴파일러에 의해 다시 작성되고 컨트롤이 비동기 표시 메서드라고 하는 메서드로 반환되므로 두 시나리오 모두 호출 스레드를 차단하지 않습니다.

다음 코드가 실행되기 시작하면 호출 스레드까지 마샬링되기 때문에 대기 중 호출 중에 발생합니다. 그것은 종종 놓치고 이유 패턴이 오해하고 따라서 오용이 같은 세부 사항입니다. 예를 들어 수학 수식을 수행하기 위한 방법과 결과를 표시하기 위한 메서드 설정이 두 가지 있습니다. 명령줄에서 .NET Core 및 CLI 도구(예: 도트넷 새 콘솔 또는 도트넷 새 콘솔 -lang vb)를 사용하거나 파일을 만들고 .NET Framework 응용 프로그램에 명령줄 컴파일러를 사용할 수 있습니다. 작업 및 작업 각각 TaskFactory의 기본 인스턴스를 반환 하는 정적 공장 속성을 노출, 그래서 Task.Factory.StartNew()로 메서드를 호출할 수 있습니다. 또한 다음 예제에서는 작업이 System.Threading.Task.Task 형식이므로 각각 공용 작업. 계산 결과를 포함하는 결과 속성입니다. 작업은 비동기적으로 실행되며 순서에 따라 완료될 수 있습니다. 계산이 완료되기 전에 Result 속성에 액세스하면 값을 사용할 수 있는 때까지 호출 스레드를 차단합니다.

함수의 여러 반복을 수행하려는 경우 Parallel.For 메서드를 사용할 수 있습니다. 예제를 살펴보겠습니다. 위의 두 예제 모두 이러한 호출이 있는 메서드가 선언에 비동기 키워드를 갖도록 해야 합니다.

カテゴリー: 未分類 パーマリンク