# Source URL: https://dev.epicgames.com/community/snippets/oYRX/fortnite-generic-sync-and-race-across-elements-in-an-array
# Local doc: epic-docs/community/snippets/oYRX/fortnite-generic-sync-and-race-across-elements-in-an-array.md
using { /Verse.org/Simulation }
# ArrayRace will call the Function argument for each element in the Array and wait for only one of the async functions to complete, canceling all the rest.
# A divide-and-conquer concurrency algorithm that divides an array into two and races between the two subarrays.
# This is a recursive implementation, where the function calls itself to race between the divided arrays.
# The base case (the condition to stop the recursion) is the array has only one element.
# This is a generic implementation using parametric types, so you can provide your own type and your own async function as arguments.
ArrayRace(Array:[]t, Function(Element:t)<suspends>:u where t:type, u:type)<suspends>:u=
# If more than two elements in the array, then split the array in half,
# and race between the subarrays recursively.
if:
Array.Length > 1
Mid := Floor(Array.Length / 2)
LeftArray := Array.Slice[0, Mid]
RightArray := Array.Slice[Mid]
then:
race:
ArrayRace(LeftArray, Function)
ArrayRace(RightArray, Function)
else if:
First := Array[0]
then:
# Grab the only element in the array and call the async function with it as the argument.
Function(First)
else:
# A race with no subtasks never completes, so sleep infinitely and call Err() because we shouldn't return a value here.
Sleep(Inf)
Err()
# ArraySync will call the Function argument for each element in the Array and wait for all the async functions to complete.
Verse Library
verse
01 Snippet
Concurrently runs async functions across array elements using race or sync divide-and-conquer algorithms.
extracted-snippets/community/snippets/oYRX/fortnite-generic-sync-and-race-across-elements-in-an-array/01-snippet.verse
Sign in free to read the full source 🌴
This Verse Library file is members-only. Create a free account to view the complete source and download the .verse file.