Remove task in handle_tasks in async_compute example

This commit is contained in:
IceSentry 2025-07-17 03:30:27 -04:00
parent f964ee1e3a
commit df42f958e2

View File

@ -89,9 +89,7 @@ fn spawn_tasks(mut commands: Commands) {
Mesh3d(box_mesh_handle), Mesh3d(box_mesh_handle),
MeshMaterial3d(box_material_handle), MeshMaterial3d(box_material_handle),
transform, transform,
)) ));
// Task is complete, so remove task component from entity
.remove::<ComputeTransform>();
}); });
command_queue command_queue
@ -108,11 +106,16 @@ fn spawn_tasks(mut commands: Commands) {
/// tasks to see if they're complete. If the task is complete it takes the result, adds a /// tasks to see if they're complete. If the task is complete it takes the result, adds a
/// new [`Mesh3d`] and [`MeshMaterial3d`] to the entity using the result from the task's work, and /// new [`Mesh3d`] and [`MeshMaterial3d`] to the entity using the result from the task's work, and
/// removes the task component from the entity. /// removes the task component from the entity.
fn handle_tasks(mut commands: Commands, mut transform_tasks: Query<&mut ComputeTransform>) { fn handle_tasks(
for mut task in &mut transform_tasks { mut commands: Commands,
mut transform_tasks: Query<(Entity, &mut ComputeTransform)>,
) {
for (entity, mut task) in &mut transform_tasks {
if let Some(mut commands_queue) = block_on(future::poll_once(&mut task.0)) { if let Some(mut commands_queue) = block_on(future::poll_once(&mut task.0)) {
// append the returned command queue to have it execute later // append the returned command queue to have it execute later
commands.append(&mut commands_queue); commands.append(&mut commands_queue);
// Task is complete, so remove task component from entity
commands.entity(entity).remove::<ComputeTransform>();
} }
} }
} }