>백엔드 개발 >C++ >.NET 4.5에서 병렬 비동기 작업의 결과를 효율적으로 실행하고 수집하려면 어떻게 해야 합니까?

.NET 4.5에서 병렬 비동기 작업의 결과를 효율적으로 실행하고 수집하려면 어떻게 해야 합니까?

DDD
DDD원래의
2025-01-13 07:16:42336검색

How Can I Efficiently Run and Collect Results from Parallel Async Tasks in .NET 4.5?

비동기 작업을 병렬로 실행하고 .NET 4.5에서 결과 수집

소개:

장기 실행 작업을 동시에 실행하고 결과를 수집하는 것은 .NET 애플리케이션의 일반적인 요구 사항입니다. .NET 4.5에서는 비동기 프로그래밍이 도입되면서 전통적인 스레드 기반 접근 방식이 발전했습니다. 이 문서에서는 .NET 4.5에서 비동기 작업의 병렬 실행을 구현하는 가장 좋은 방법을 살펴봅니다.

원본 코드:

제공된 코드는 Task.Run()을 사용하여 두 개의 장기 실행 작업을 시작한 다음 Result를 사용하여 해당 결과를 검색하는 기본 접근 방식을 보여줍니다. 그러나 이 방법에는 몇 가지 제한 사항이 있습니다.

  • Sleep은 다른 메서드를 기다릴 수 있는 비동기식 메서드가 될 수 없습니다.
  • 코드가 어색하고 새로운 언어 기능을 활용하지 않습니다.
  • Result 사용 시 결과 차단이 발생할 수 있으며, 이는 성능에 영향을 미칩니다.

잘못된 코드:

비동기 메서드를 호출하여

실행되지 않는 작업을 생성하려는 시도는 비동기 메서드가 즉시 실행을 시작하기 때문에 실패합니다.

최상의 솔루션:

가장 좋은 솔루션은 장기 실행 작업의 비동기 버전을 사용하고 Task.WhenAll() 메서드를 활용하는 것입니다. 예시는 다음과 같습니다.

<code class="language-csharp">async Task<int> LongTask1() { 
  // ...长时间运行的任务1...
  return 0; 
}

async Task<int> LongTask2() { 
  // ...长时间运行的任务2...
  return 1; 
}

// ...
{
   Task<int> t1 = LongTask1();
   Task<int> t2 = LongTask2();
   await Task.WhenAll(t1,t2);
   //现在我们可以访问t1.Result和t2.Result
}</code>

이 코드는 LongTask1 및 LongTask2에 대한 비동기 작업을 생성한 다음 Task.WhenAll()을 사용하여 완료될 때까지 기다립니다. 이를 통해 작업을 차단하지 않고 동시에 실행할 수 있습니다. 마지막으로 t1.Result 및 t2.Result를 사용하여 결과에 액세스할 수 있습니다.

위 내용은 .NET 4.5에서 병렬 비동기 작업의 결과를 효율적으로 실행하고 수집하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.