小编thi*_* gg的帖子

Kotlin:withContext()vs Async-await

我一直是kotlin文档,如果我理解正确,两个kotlin函数的工作原理如下:

  1. withContext(context):切换当前协同程序的上下文,当给定的块执行时,协同程序切换回上一个上下文.
  2. async(context):在给定的上下文中启动一个新的协同程序,如果我们调用.await()返回的Deferred任务,它将挂起调用协程并在生成的协同程序内执行的块返回时恢复.

现在为以下两个版本code:

版本1:

  launch(){
    block1()
    val returned = async(context){
      block2()
    }.await()
    block3()
  }
Run Code Online (Sandbox Code Playgroud)

版本2:

  launch(){
    block1()
     val returned = withContext(context){
      block2()
    }
    block3()
  }
Run Code Online (Sandbox Code Playgroud)
  1. 在两个版本中,block1(),block3()在默认上下文(commonpool?)中执行,其中block()在给定的上下文中执行.
  2. 整体执行与block1() - > block2() - > block3()顺序同步.
  3. 我看到的唯一区别是version1创建了另一个协程,其中version2在切换上下文时只执行一个协同程序.

我的问题是:

  1. 使用它并不总是更好,withContext而不是async-await功能相似,但不会创建另一个协同程序.大型数字协程,虽然轻量级仍然是要求苛刻的应用程序中的问题

  2. 是否有async-await更优先的案例withContext

更新: Kotlin 1.2.50现在有一个可以转换的代码检查async(ctx) { }.await() to withContext(ctx) { }.

kotlin kotlin-coroutines

67
推荐指数
3
解决办法
1万
查看次数

Go-lang:如何将切片转换为固定大小的数组?

我想从切片转换固定大小的数组:

func gen(bricks []Brick) {
    if len(bricks) == 16 {
        if check(Sculpture{bricks}) {
            var b [16]Brick = bricks[0:16];
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

但这会导致:

 cannot use bricks[0:16] (type []Brick) as type [16]Brick in assignment
Run Code Online (Sandbox Code Playgroud)

如何将切片转换为固定大小的数组?

arrays go slice

21
推荐指数
1
解决办法
2万
查看次数

使用类成员作为成员函数的默认参数

除了手动重载相应的成员函数并以成员作为参数调用第一个重载之外,还有其他方法吗?

我正在尝试一些事情

class test
{
    string t1="test";

    testfun( string& val = this->t1 )
    { /* modify val somehow */ }
};
Run Code Online (Sandbox Code Playgroud)

(测试一下:http://goo.gl/36p4CF)

目前我猜没有技术上的原因,为什么这不起作用.

  • 除了重载和手动设置参数外,是否有这样的解决方案?
  • 为什么这不起作用,是否有技术原因呢?

c++ overloading default-value c++11

12
推荐指数
1
解决办法
1897
查看次数

当针对 JavaScript 时,我可以在 Kotlin 中使用协程吗?

是否可以在针对 JavaScript 时启动任何协程?它不喜欢任何常见的方式,例如 async{}

示例:https: //github.com/thigg/no-kotlinx-in-js

kotlin kotlin-js kotlin-coroutines

7
推荐指数
1
解决办法
4102
查看次数

CMake:如果未找到,则自动 Boost 下载和构建

我想在我的项目中进行故障安全设置。我真的不想在每次设置时都安装 boost 和其他库。

因此,如果找不到所需的 Boost 版本,cmake 会下载并编译 boost 并将该版本用于项目,这将是很棒的。

有没有简单的可能?

我在女仆安全项目中找到了这个。但我对 cmake 的经验并不丰富,也不知道如何使用它。

c++ boost cmake

6
推荐指数
1
解决办法
4334
查看次数

当不针对浏览器时,如何在 Kotlin 中调用像 setTimeout 这样的 JS 函数

我是否必须像这样在外部定义它们:

external fun setTimeout(exec: suspend () -> Unit, timout: Int)
Run Code Online (Sandbox Code Playgroud)

或者 stdlib 中有我可以使用的东西吗?

我无法使用 kotlin.browser.window.setTimeout 因为我想用 nodejs 运行它。

kotlin kotlin-js

5
推荐指数
1
解决办法
1687
查看次数

如何使用JavaPOS使用Epson打印机打印收据?

如何开发Java软件以使用Epson reciept打印机打印收据?

printing epson javapos

4
推荐指数
1
解决办法
1万
查看次数

如何停止java 8 lambda-runnable-thread

我想停止这个帖子:

Runnable run= ()->{while(true)[...];};
run.run();
Run Code Online (Sandbox Code Playgroud)

但是没有run.stop()办法.

请建议另一个尽可能短的方法来启动和停止一个线程或一个方法来停止这个运行...的事情.

java multithreading runnable

2
推荐指数
1
解决办法
2583
查看次数