Like @schedule, @async wraps an expression in a Task and adds it to the local machine's scheduler queue. Additionally it adds the task to the set of items that the nearest enclosing @sync waits for. @async also wraps the expression in a let x=x, y=y, ... block to create a new scope with copies of all variables referenced in the expression.


Usage examples of @async in Julia:

  1. Execute a function asynchronously:

    function myfunction()
       # Some time-consuming calculation
       println("Function executed asynchronously")
    @async myfunction()

    This example executes the myfunction asynchronously, meaning the program will continue running without waiting for the function to complete.

  2. Asynchronous computation with @sync:

    function task1()
       # Some task
       println("Task 1 executed")
    function task2()
       # Some other task
       println("Task 2 executed")
    @sync begin
       @async task1()
       @async task2()

    Here, @async is used within an @sync block to execute multiple tasks asynchronously. The @sync block waits for all the tasks to complete before proceeding.

  3. Asynchronous HTTP request:

    using HTTP
    @async begin
       response = HTTP.get("https://www.example.com")
       println("HTTP request completed")
       println("Response status: ", response.status)

    In this example, an HTTP request is made asynchronously using HTTP.get. The program continues running without waiting for the response, allowing other tasks to execute concurrently.

  4. Async task with variables from the enclosing scope:

    x = 10
    @async begin
       println("The value of x is: ", x)
       # Some other operations

    The @async block can access variables from the enclosing scope. It creates a new scope with copies of all referenced variables.

Note: It's important to note that @async does not guarantee the order of execution. The tasks may complete in a different order than they were created.

Please let me know if you need further assistance with Julia functions or any other topic!

See Also

:@async, :@schedule, :@task, Condition, consume, interrupt, istaskdone, istaskstarted, lock, notify, ReentrantLock, schedule, Task, task_local_storage, unlock, wait, yield, yieldto,

User Contributed Notes

Add a Note

The format of note supported is markdown, use triple backtick to start and end a code block.

*Required Field

Checking you are not a robot: