이 항목에서는 스레드 풀 작업에 대한 모범 사례를 설명합니다.
해야 할 일
스레드 풀을 사용하여 앱에서 병렬 작업을 수행합니다.
작업 항목을 사용하여 UI 스레드를 차단하지 않고 확장 작업을 수행합니다.
수명이 짧고 독립적인 작업 항목을 만듭니다. 작업 항목은 비동기적으로 실행되며 큐에서 순서에 따라 풀에 제출할 수 있습니다.
업데이트를 UI 스레드로 보냅니다. WinUI 3 앱에서는
Microsoft.UI.Dispatching.DispatcherQueue의DispatcherQueue.TryEnqueue를 사용합니다.Sleep 함수 대신 ThreadPoolTimer.CreateTimer를 사용합니다.
사용자 고유의 스레드 관리 시스템을 만드는 대신 스레드 풀을 사용합니다. 스레드 풀은 고급 기능을 사용하여 OS 수준에서 실행되며 프로세스 내 및 시스템 전체에서 디바이스 리소스 및 활동에 따라 동적으로 크기 조정하도록 최적화됩니다.
C++에서 작업 항목 대리자가 Agile 스레딩 모델을 사용하는지 확인합니다(C++ 대리자는 기본적으로 Agile임).
사용 시 리소스 할당 오류를 허용할 수 없는 경우 미리 할당된 작업 항목을 사용합니다.
하지 말아야 할 것들
기간 값<이 1밀리초(0 포함)인 정기 타이머를 만들지 마세요. 이로 인해 작업 항목이 1회성 타이머처럼 작동하게 됩니다.
period 매개 변수에 지정한 시간보다 완료하는 데 더 오래 걸리는 정기 작업 항목은 제출하지 마세요.
백그라운드 작업에서 디스패치된 작업 항목으로 UI를 업데이트하려고 하지 마세요(토스트 알림과 알림 제외). 대신 백그라운드 작업 진행률 및 완료 처리기(예: IBackgroundTaskInstance.Progress)를 사용합니다.
비동기 키워드를 사용하는 작업 항목 처리기를 사용하는 경우 작업 항목에서 전체 상태가 설정되었을 때 처리기의 모든 코드가 실행되었다고 가정하지 마세요. 처리기의 모든 코드가 실행되기 전에 스레드 풀 작업 항목을 전체 상태로 설정할 수 있습니다. 작업 항목이 전체 상태로 설정된 후 처리기 내에서 await 키워드를 따르는 코드가 실행 될 수 있습니다.
미리 할당된 작업 항목을 다시 초기화하지 않고 두 번 이상 실행하지 마세요. 정기적인 작업 항목 만들기
관련 항목
Windows developer