>백엔드 개발 >C++ >C# ForEach 루프 내에서 비동기 작업을 올바르게 처리하는 방법은 무엇입니까?

C# ForEach 루프 내에서 비동기 작업을 올바르게 처리하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-05 09:38:12375검색

How to Properly Handle Asynchronous Operations within a C# ForEach Loop?

Async 및 ForEach를 사용하여 데이터 쿼리

C#에서 비동기 작업을 수행할 때는 해당 작업을 코드와 적절하게 통합하는 방법을 이해하는 것이 중요합니다. ForEach와 같은 블록. ForEach 문 내에서 Async 키워드를 사용하려고 할 때 한 가지 일반적인 문제가 발생하며, 이로 인해 컴파일 오류가 발생할 수 있습니다.

오류: Async가 현재 컨텍스트에 존재하지 않습니다

아래 코드 조각에서 볼 수 있듯이 ForEach 문 내에서 Async를 사용하려고 하면 다음과 같은 결과가 발생할 수 있습니다. 오류:

using (DataContext db = new DataLayer.DataContext())
{
    db.Groups.ToList().ForEach(i => async {
        await GetAdminsFromGroup(i.Gid);
    });
}

현재 컨텍스트에 'Async'라는 이름이 없기 때문에 오류가 발생합니다. 이는 ForEach가 비동기 대리자를 지원하지 않기 때문입니다.

Task.WhenAll을 사용하는 대체 접근 방식

ForEach 문 내에서 비동기 작업을 효과적으로 처리하려면 Task를 사용할 수 있습니다. WhenAll 메서드. 이 접근 방식에는 각 요소를 비동기 작업으로 프로젝션하는 작업이 포함됩니다.

using (DataContext db = new DataLayer.DataContext())
{
    var tasks = db.Groups.ToList().Select(i => GetAdminsFromGroupAsync(i.Gid));
    var results = await Task.WhenAll(tasks);
}

이 접근 방식은 여러 가지 장점을 제공합니다.

  • 적절한 오류 처리: 비동기 void 메서드는 캐치로 잡았습니다. Task.WhenAll은 자연스러운 예외 처리를 허용합니다.
  • 완료 인식: Task.WhenAll을 사용하면 모든 비동기 작업이 완료되는 시점을 확인할 수 있습니다.
  • 자연 결과 검색 구문: GetAdminsFromGroupAsync는 결과를 생성하는 작업을 의미하며, 결과는 다음과 같이 설정되지 않고 자연스럽게 반환될 수 있습니다. 부작용.

위 내용은 C# ForEach 루프 내에서 비동기 작업을 올바르게 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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