/// <summary> /// Create avatar and save photo to disk. /// </summary> private IEnumerator CreateNewAvatar(byte[] photoBytes) { PipelineType pipeline = pipelineType; // Choose default set of resources to generate var resourcesRequest = avatarProvider.ResourceManager.GetResourcesAsync(AvatarResourcesSubset.DEFAULT, pipelineType); yield return(resourcesRequest); if (resourcesRequest.IsError) { yield break; } var initializeAvatar = avatarProvider.InitializeAvatarAsync(photoBytes, "name", "description", pipeline, resourcesRequest.Result); yield return(Await(initializeAvatar, null)); string avatarCode = initializeAvatar.Result; if (initializeAvatar.IsError) { UpdateAvatarState(avatarCode, GalleryAvatarState.FAILED); yield break; } yield return(UpdateAvatarList()); UpdateAvatarState(avatarCode, GalleryAvatarState.GENERATING); var calculateAvatar = avatarProvider.StartAndAwaitAvatarCalculationAsync(avatarCode); yield return(Await(calculateAvatar, avatarCode)); if (calculateAvatar.IsError) { UpdateAvatarState(avatarCode, GalleryAvatarState.FAILED); yield break; } var downloadAvatar = avatarProvider.MoveAvatarModelToLocalStorageAsync(avatarCode, pipeline == PipelineType.FACE, true); yield return(Await(downloadAvatar, avatarCode)); if (downloadAvatar.IsError) { UpdateAvatarState(avatarCode, GalleryAvatarState.FAILED); yield break; } UpdateAvatarState(avatarCode, GalleryAvatarState.COMPLETED); }