javascript - JavaScript 中是否有等效的 Task.Run ?

标签 javascript c# multithreading

在 C# 中,有 Task.Run(() => {}) 方法,可以轻松异步运行代码。 JavaScript 中有等效的方法吗?

到目前为止,我得到的关闭是 nested usage of setTimeout like this:

setTimeout(async function logStatus() {
    const result = await someNetworkCall();
    console.log(result);
    setTimeout(() => {
      logStatus();
    }, 1000);
  }, 1000);

上面的代码只是每秒调用一次网络服务并将结果记录到控制台。但是,我担心由于让 logStatus 方法从自身内部调用 logStatus 的递归方式,最终会出现 stackoverflow 异常。

有更好的方法吗?

最佳答案

虽然我不是一个 JS 专家(甚至精通 JS),但你应该能够使用立即调用的函数表达式,并且 Promise 总是立即执行来实现这一点,这一点喜欢

// we want/ need a promise based sleep function
function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

// now our actual continuously running function
// this is a IIFE: https://flaviocopes.com/javascript-iife/
(async () => {
    while (true) {
        const result = await someNetworkCall();
        console.log(result);
        await sleep(1000);
    }
})()

您可能想要实现一些功能,以便可以取消 while (true) 循环,但我会将其留给您

相当于 Task.Run(async () => ... ) 将是 (async () => ... )()我可以看出,C# Task 的等价物是 Promise

我创建了一个 jsfiddle,您可以在浏览器中运行,演示核心概念 here (别担心,我用 for 循环替换了 while true 循环,该循环达到 10,因此它实际上停止运行)

关于javascript - JavaScript 中是否有等效的 Task.Run ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72864901/

相关文章:

java - 如何使用多线程允许多个客户端连接到服务器?

Java 可重入锁和条件 |生产者完成工作,消费者陷入困境

java - 为什么同步方法允许多个线程并发运行?

javascript - 在 JavaScript 变量中添加 HTML 代码?

javascript - vaadin 网格的组件渲染器

javascript - 现代网络爬虫是使用点击事件还是直接导航到 anchor 标签上的 href?

javascript - ElementHandle.$eval pageFunction 未执行

c# - 打印 i,j 的每个值的输出

c# - Dotnet-core默认使用2.0框架ubuntu

c# - 类型化数据集的正确用法