Coder Social home page Coder Social logo

Comments (7)

rmanoka avatar rmanoka commented on July 20, 2024

@orbli Can you provide a minimal example to reproduce the error?

from async-scoped.

orbli avatar orbli commented on July 20, 2024
use std::time::Duration;
use async_std::task;
use async_scoped::scope_and_block;

async fn some_task() {
    println!("some task");
}

async fn spawned_task() {
    scope_and_block(|s| {
        s.spawn(some_task());
    });
}

async fn async_main() {
    task::spawn(spawned_task());
    task::sleep(Duration::from_secs(1)).await;
}

fn main() {
    task::block_on(async_main());
}

from async-scoped.

rmanoka avatar rmanoka commented on July 20, 2024

It seems to be an issue in async-std not allowing block_on inside a spawn. The following example also causes the same error (tested with async-std release 1.6.3).

#[test]
fn test_recursive_block() {
    task::block_on(async {
        task::spawn(async {
            task::block_on(async {
                eprintln!("Hello block!");
            })
        });
    })
}

from async-scoped.

orbli avatar orbli commented on July 20, 2024

i agree your answer, sorry 😂😂😂 let's raise this to async std and see if they offer any help

from async-scoped.

rmanoka avatar rmanoka commented on July 20, 2024

@orbli This behaviour of async-std may be necessary to prevent deadlocks, as I believe they internally use a fixed number of worker threads to process the futures. See for instance this issue.

Unfortunately, the only safe way provided in this crate currently uses a block_on construct. I have not been actively following the async rust developments recently, so I am not sure if there is an alternative. Let us see if async-std authors offer some interesting ideas around this issue.

from async-scoped.

rmanoka avatar rmanoka commented on July 20, 2024

@orbli It seems the panic only happens in recent releases of async-std. If it suffices for your use-case, you can consider fixing the version of async-std in your project to 1.4.x (using something like async-std = "~1.4.0") in Cargo.toml.

Also, replacing the task::block_on with either smol::block_on or futures_lite::block_on seems to work. I should look into using one of these internally, but I am not a 100% sure how these crates plan to progress in the future. Will try to dig into code, and issues on this.

from async-scoped.

rmanoka avatar rmanoka commented on July 20, 2024

v0.5.0 and above do not have the panic

from async-scoped.

Related Issues (19)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.