【问题标题】:Can I implement c# task asynchronous with java(type)script?我可以用 java(type)script 异步实现 c# 任务吗?
【发布时间】:2020-02-11 19:40:52
【问题描述】:

我只是对使用 javascripttypescript 进行异步工作感到好奇。
我用C# 做了一些程序,下面是我写的源代码。

static void Main(string[] args)
{
    var t1= Task.Run(() => { myFunc(0, ConsoleColor.Green); });
    var t2 = Task.Run(() => { myFunc(50000, ConsoleColor.Red); });

    t1.Wait();
    t2.Wait();
}

static void myFunc(int number, ConsoleColor color)
{

    for (int i = 0; i < 1e4; i++)
    {
        Console.ForegroundColor = color;
        Console.WriteLine(number + i);
    }
}

下面是结果截图。

我可以想象为什么控制台会写出上面的结果。

以下源代码是用打字稿编写的。我试图模拟相同的结果,但失败了。

let i: number;
let j: string;
let k: number;
let mx: number =1e4;

function myFunc(offset: number, color: string) {

    return new Promise(() => {

        for (i = 0; i < mx; i++) {
            console.log(color, i + offset);
        }
    });

};

async function myFunc2() {
    const aa = myFunc(0, "\x1b[32m");
    const bb = myFunc(50000, "\x1b[35m");
    await aa;
    await bb;

}

myFunc2();

下图是打字稿之一。

我能得到任何建议以在 `java(type)script 中使用 C# 生成相同的结果吗?我尝试了很多次实现,但很多次都失败了。
谢谢你的阅读。

【问题讨论】:

  • 据我所知,JavaScript 是单线程的。您在 C# 中使用“Task.Run”所做的是在线程池线程上执行代码,而这在 JavaScript(也不是 TypeScript)中没有。在寻找可能建议解决方法的“多线程 javascript”时,您可能会得到一些结果。

标签: c# typescript asynchronous


【解决方案1】:

JavaScript 在同一上下文中只有一个线程,但 Web 浏览器 API 没有。我们还可以通过使用 setTimeout 函数来模拟并行性,或者在有一些限制的情况下,使用 WebWorkers 提供的真实并行性来模拟并行性。

https://www.w3schools.com/jsref/met_win_settimeout.asp

https://www.w3schools.com/html/html5_webworkers.asp

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 2019-04-08
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2013-03-01
    • 2022-07-23
    • 2011-11-21
    • 2018-10-08
    相关资源
    最近更新 更多