标签: coroutine

为什么stl vector不能包含coroutine对象?

我在boost1.53中使用coroutine,请参阅下面的代码:

boost::coroutines::coroutine<int()> f(std::bind(foo, ...));
std::vector<decltype(f)> container; // it can be compiled
container.push_back(f); // compile error
Run Code Online (Sandbox Code Playgroud)

错误:

no matching function for call to ‘std::vector<boost::coroutines::coroutine<int(),0> >::vector(paracel::coroutine<int>&)’
Run Code Online (Sandbox Code Playgroud)

更新:错误发生,因为'boost :: coroutines :: coroutine'中没有复制构造/运算符,这里的情况是我只想将'f'保存到将索引映射到'f'的容器中.

我也试过unordered_map和emplace_back,它仍然无法正常工作!

如何使它在C++中工作?

Update2:我尝试了vector,unordered_map,与emplace_back,push_back,std :: move一起映射,并且都失败了.但是list和deque在push_back/emplace_back和std :: move中是可以的:

std::deque<decltype(f)> container1;
container.push_back(std::move(f)); // ok
std::deque<decltype(f)> container2;
container.emplace_back(std::move(f)); // ok
std::list<decltype(f)> container3;
container.push_back(std::move(f)); // ok
std::list<decltype(f)> container4;
container.emplace_back(std::move(f)); // ok
Run Code Online (Sandbox Code Playgroud)

为什么?

c++ boost stl coroutine c++11

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

Node.js流可以作为协程进行制作吗?

有没有办法使Node.js流作为协程.

斐波那契数字流的示例.

fibonacci.on('data', cb);
//The callback (cb) is like
function cb(data)
{
    //something done with data here ...
}
Run Code Online (Sandbox Code Playgroud)

期望

function* fibonacciGenerator()
{
    fibonacci.on('data', cb);
    //Don't know what has to be done further... 
};

var fibGen = fibonacciGenerator();
fibGen.next().value(cb);
fibGen.next().value(cb);
fibGen.next().value(cb);
.
.
.
Run Code Online (Sandbox Code Playgroud)

从发电机中取出所需的数字.这里Fibonacci数字系列只是一个例子,实际上流可以是任何文件,mongodb查询结果等.

也许这样的事情

  1. 将'stream.on'函数设为生成器.
  2. 将yield放在回调函数中.
  3. 获取生成器对象.
  4. 调用next并在流中获取下一个值.

是否至少可能,如果是,如果不是为什么?也许一个愚蠢的问题:)

generator coroutine node.js

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

eventlet池有何用处?

我试图了解eventlet.tpool的作用。文档说tpool.execute()允许您使用阻塞函数并在新线程中运行它。但是,tpool.execute()方法本身会阻塞,直到线程完成!那么这可能有用吗?如果我有一些阻塞/长时间运行的函数myfunc()并直接调用它,它将阻塞。如果我在tpool.execute(myfunc)内部调用它,则tpool.execute(myfunc)调用将阻塞。到底有什么区别?

我唯一能猜到的是,当直接调用myfunc()时,它不仅会阻止此协程,而且还会阻止其他协程运行,而调用tpool.execute()会阻止当前协程,但会以某种方式屈服,以便其他协程可以跑。是这样吗 否则,我看不出tpool如何有用。

python multithreading coroutine eventlet

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

asyncio.wait_for()的目的

据我了解,从协程中的协程产生的结果将线程控制传递给事件循环。

然后,事件循环在其他协程(在其中,从协程产生的协程)之间进行某种调度,并在某个时间点恢复称为yield from的协程。

与将协程包装在ansyncio.wait_for调用中并从后者中产生什么有什么不同?

coroutine python-3.4 python-asyncio

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

如何通过反射运行挂起方法?

有一个可以运行挂起功能的协程块.

但是我invoke通过反射来调用函数.这是java风格的调用,显然简单的调用是行不通的.有没有办法异步运行反射方法?如何等待这种方法?

import kotlin.coroutines.experimental.*

class TestClass(val InString: String) {
    suspend fun printString() {
        println(InString)
    }
}

fun launch(context: CoroutineContext, block: suspend () -> Unit) =
        block.startCoroutine(StandaloneCoroutine(context))

private class StandaloneCoroutine(override val context: CoroutineContext): Continuation<Unit> {
    override fun resume(value: Unit) {}

    override fun resumeWithException(exception: Throwable) {
        val currentThread = Thread.currentThread()
        currentThread.uncaughtExceptionHandler.uncaughtException(currentThread, exception)
    }
}

fun main(args: Array<String>) {
    launch(EmptyCoroutineContext) {
        val a = TestClass("TestString");

        for (method in a.javaClass.methods) {
            if (method.name == "printString")
                method.invoke(a)  // Exception in thread "main" java.lang.IllegalArgumentException: …
Run Code Online (Sandbox Code Playgroud)

java coroutine async-await kotlin kotlin-coroutines

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

任务等待异步的Unity Coroutine yield return null等效

yield return null;在异步方法中,Coroutine(在Update运行每帧)的等效项是什么?

我找到的最接近的是await Task.Delay(1);,但不要每帧都运行一次。

private IEnumerator RunEachFrame()
{
    while (true)
    {
        print("Run Each frame right before rendering");
        yield return null;
    }
}

async void DoNotRunEachFrame()
{
    while (true)
    {
        await Task.Delay(1); // What is the equivalent of yield return null here ?
    }
}
Run Code Online (Sandbox Code Playgroud)

c# coroutine unity-game-engine async-await .net-4.6

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

是否有任何领域的线程应该优于Coroutines?

我刚刚谈了Kotlin的Coroutines,如果Coroutines总是可以取代Threads或者也有可能存在缺点,那么问题就出现了.

或者反过来说:是否有任何不应该使用Coroutines的区域?

multithreading coroutine kotlin kotlin-coroutines

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

kotlin GlobalScope,kotlin.coroutines中不提供runBlocking。*

我在这里的 github中有多模块kotlin gradle项目。

我的一个子项目的introducing-coroutines与构建文件build.gradle.kts的文件是在这里

的内容build.gradle.kts是-

    import org.jetbrains.kotlin.gradle.dsl.Coroutines
    import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

    plugins {
        java
        kotlin("jvm") version "1.3.11"
    }

    group = "chapter2"
    version = "1.0-SNAPSHOT"

    repositories {
        mavenCentral()
    }

    dependencies {
        compile(kotlin("stdlib-jdk8"))
        compile(kotlin ("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0"))
        testCompile("junit", "junit", "4.12")
    }

    configure<JavaPluginConvention> {
        sourceCompatibility = JavaVersion.VERSION_1_8
    }


    tasks.withType<KotlinCompile> {
        kotlinOptions.jvmTarget = "1.8"
    }

    kotlin {
        experimental {
            coroutines   = Coroutines.ENABLE
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试从此链接创建我的第一个协程程序。

import kotlinx.coroutines.*

fun main() {
    GlobalScope.launch { // launch new coroutine in background …
Run Code Online (Sandbox Code Playgroud)

coroutine kotlin kotlin-extension kotlinx.coroutines

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

未解决的参考:1.3中的Kotlin中的异步

我在这里的 github中有多模块kotlin gradle项目。

我的子项目中的一个介绍协程的构建文件build.gradle.kts文件在这里

build.gradle.kts的内容是-

    import org.jetbrains.kotlin.gradle.dsl.Coroutines
    import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

    plugins {
        java
        kotlin("jvm") version "1.3.11"
    }

    group = "chapter2"
    version = "1.0-SNAPSHOT"

    repositories {
        mavenCentral()
    }

    dependencies {
        compile(kotlin("stdlib-jdk8"))
        compile("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0")
        testCompile("junit", "junit", "4.12")
    }

    configure<JavaPluginConvention> {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    tasks.withType<KotlinCompile> {
        kotlinOptions.jvmTarget = "1.8"
    }

    kotlin {
        experimental {
            coroutines   = Coroutines.ENABLE
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试从此链接创建我的第一个协程程序。

import kotlinx.coroutines.*
import kotlinx.coroutines.async
import kotlin.system.*
import kotlin.system.measureTimeMillis

suspend  fun computecr(array: IntArray, low: Int, high: Int): Long …
Run Code Online (Sandbox Code Playgroud)

coroutine kotlin kotlin-extension kotlinx.coroutines

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

如何通过改造+协程处理错误响应

我是协程新手。通过本教程尝试使用改造+协程+ Jake Wharton的CoroutineCallAdapterFactory

但是不知道如何处理json响应错误。例如错误可能是这样的:

{
  "code": 105,
  "error": "invalid field name: bl!ng"
} 
Run Code Online (Sandbox Code Playgroud)

我认为在TmdbMovie类中添加代码错误字段(并检查对象是否为空字段)-是错误的。然后-在TmdbViewModel中启动协程后如何使用错误字段?

android coroutine kotlin retrofit

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