Kotlin 协程

时间:2020-04-21
本文章向大家介绍Kotlin 协程,主要包括Kotlin 协程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

为什么需要协程

在JavaScript ES6中引入了Promise对象,以及async和await关键字,使得异步编程变得容易了:

const child_process = require('child_process');
const worker = require('worker_threads');

function getData() {
    return new Promise((resolve, reject) => {
        // 这里开启了一个新的工作线程,工作耗时2s
        const th = new worker.Worker(__filename);
        th.once('message', data => {
            resolve(data);
        })
    });
}

async function asyncTask() {
    var data = await getData();
    console.log('主线程', worker.threadId, ': 很明显,工作线程计算完毕了,结果是多少呢,我已经返回给调用者了');
    return data
}

function main() {
    console.log('主线程', worker.threadId, ': 开始你的表演show');
    asyncTask().then(data => {
        console.log('主线程', worker.threadId, ': 我当然知道结果是', data);
    });
    console.log('主线程', worker.threadId, ': 你慢慢来,别着急哈!');
}

if (worker.isMainThread) {
    main();
} else {
    console.log('工作线程', worker.threadId, ': 开始堵塞');
    child_process.execSync(`sleep 2`);
    console.log('工作线程', worker.threadId, ': 我好了');
    worker.parentPort.postMessage(2020)
}

/*
主线程 0 : 开始你的表演show
主线程 0 : 你慢慢来,别着急哈!
工作线程 1 : 开始堵塞
主线程 0 : 很明显,工作线程计算完毕了,结果是多少呢,我已经返回给调用者了
主线程 0 : 我当然知道结果是 2020
工作线程 1 : 我好了
*/

原文地址:https://www.cnblogs.com/develon/p/12743779.html