XAsyncBlock
XAsyncBlock을 자세히 살펴보겠습니다. 다음과 같이 정의된 구조체입니다.- queue - 작업을 실행할 위치에 대한 정보를 나타내는 핸들인 XTaskQueueHandle. 이 매개변수가 설정되지 않으면 기본 큐가 사용됩니다.
- context - 콜백 함수에 데이터를 전달할 수 있습니다.
- callback - 비동기 작업이 완료된 후 호출될 선택적 콜백 함수. 콜백을 지정하지 않으면 XAsyncGetStatus로 XAsyncBlock이 완료될 때까지 기다린 후 결과를 얻을 수 있습니다.
중요: XAsyncBlock은 비동기 작업이 완료될 때까지 메모리에 남아 있어야 합니다. 동적으로 할당된 경우 XAsyncBlock의 완료 콜백 내부에서 삭제할 수 있습니다.
비동기 작업 대기
비동기 작업이 완료되었는지 알 수 있는 두 가지 방법이 있습니다.- XAsyncBlock의 완료 콜백이 호출됩니다.
- XAsyncGetStatus를 true로 호출하여 완료될 때까지 기다립니다.
비동기 작업 결과 가져오기
결과를 얻기 위해, 대부분의 비동기 API 함수에는 비동기 호출의 결과를 받기 위한 해당 Result 함수가 있습니다. 예제 코드에서 PFProfilesGetProfileAsync에는 해당 PFProfilesGetProfileGetResult 함수가 있습니다. 이 함수를 사용하여 함수의 결과를 검색하고 그에 따라 조치를 취할 수 있습니다. 결과 검색에 대한 자세한 내용은 각 비동기 API 함수의 설명서를 참조하세요.XTaskQueueHandle
XTaskQueueHandle을 사용하면 어떤 스레드가 비동기 작업을 실행하고 어떤 스레드가 XAsyncBlock의 완료 콜백을 호출할지 결정할 수 있습니다. 디스패치 모드를 설정하여 이러한 작업을 수행하는 스레드를 제어할 수 있습니다. 사용 가능한 세 가지 디스패치 모드가 있습니다.- Manual - 수동 큐는 자동으로 디스패치되지 않습니다. 개발자가 원하는 스레드에서 디스패치하는 것은 개발자의 책임입니다. 이를 사용하여 비동기 호출의 작업 또는 콜백 측을 특정 스레드에 할당할 수 있습니다.
- Thread Pool - 스레드 풀을 사용하여 디스패치합니다. 스레드 풀은 스레드 풀 스레드가 사용 가능해짐에 따라 큐에서 호출을 가져와 병렬로 호출을 호출합니다. Thread Pool은 사용하기 가장 쉽지만 사용되는 스레드에 대한 제어가 가장 적습니다.
- Serialized Thread Pool - 스레드 풀을 사용하여 디스패치합니다. 스레드 풀은 단일 스레드 풀 스레드가 사용 가능해짐에 따라 큐에서 호출을 가져와 직렬로 호출을 호출합니다.
- Immediate - 큐에 대기 중인 작업을 제출한 스레드에서 즉시 디스패치합니다.
XTaskQueueHandle 수동으로 디스패치
XTaskQueueHandle의 작업 또는 완료 큐에 수동 큐 디스패치 모드를 사용한 경우 수동으로 디스패치해야 합니다. 작업 큐와 완료 큐가 모두 수동 디스패치로 설정된 XTaskQueueHandle이 다음과 같이 만들어졌다고 가정해 봅시다.- queue - 작업을 디스패치할 큐.
- port - XTaskQueuePort 열거형의 인스턴스.
- timeoutInMs - 밀리초 단위의 타임아웃에 대한 uint32_t.
XTaskQueueDispatch를 호출해야 할 때
큐가 새 항목을 받았을 때를 확인하기 위해, XTaskQueueRegisterMonitor를 호출하여 이벤트 처리기를 설정하여 작업 또는 완료가 디스패치될 준비가 되었음을 코드에 알릴 수 있습니다.- queue - 콜백을 제출하는 비동기 큐.
- callbackContext - 제출 콜백에 전달되어야 하는 데이터에 대한 포인터.
- callback - 새 콜백이 큐에 제출될 때 호출되는 함수.
- token - 콜백을 제거하기 위해 나중에 XTaskQueueUnregisterMonitor를 호출할 때 사용되는 토큰.
