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에 대한 이후 호출에서 사용되는 토큰.
