标签: coroutine

你如何使用C#进行协同例程?

在python中,yield关键字可以在push和pull上下文中使用,我知道如何在c#中执行pull上下文,但是如何实现push.我发布了我试图在c#中从python中复制的代码:

def coroutine(func):
  def start(*args,**kwargs):
    cr = func(*args,**kwargs)
    cr.next()
    return cr
  return start

@coroutine
def grep(pattern):
  print "Looking for %s" % pattern
  try:
    while True:
      line = (yield)
      if pattern in line:
        print line,
  except GeneratorExit:
    print "Going away. Goodbye"
Run Code Online (Sandbox Code Playgroud)

c# python coroutine system.reactive

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

跨线程的ucontext

是否ucontext.h允许跨线程共享上下文(由函数操作的对象)?也就是说,我swapcontext可以将第二个参数作为makecontext在另一个线程中创建的上下文吗?测试程序似乎表明这可以在Linux上运行.我无法在这方面找到文档,而Windows光纤似乎明确支持这样的用例.一般来说这样安全吗?这应该是标准的POSIX行为吗?

linux coroutine

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

让Django变绿

我有一个Django管理命令,可以产生数千个TCP/UDP请求.我已经使用Gevent加快了速度,因为我重新组织了我的代码以作为协程工作.套接字连接不再阻塞,但从我所读到的,Django的部分仍然不是绿色.(绿色,我的意思是使用greenlets.)

你能告诉我Django的哪些部分不是绿色的,我可以做些什么让它们变绿?我认为有些DB相关的部分仍然存在阻碍.是否有任何Django库/补丁可以帮助我实现绿色?

我不太关心请求/响应周期是否为绿色,因此Gunicorn会帮助我吗?

谢谢

python django coroutine gevent greenlets

10
推荐指数
1
解决办法
2511
查看次数

Android下线程的替代方式

Android的Java和Oracle的Java略有不同.是否可以使用以下actor或协同程序

同样适用于Android,以避免在Android的Java和Oracle的Java之间使用线程和共享更多代码?是否有其他框架可用于两个Java版本.

先感谢您.

parallel-processing multithreading android coroutine actor

10
推荐指数
1
解决办法
1902
查看次数

等待n goroutines的终止

我需要开始大量的goroutines并等待他们的终止.直观的方式似乎使用一个频道等待所有这些都完成:

package main

type Object struct {
    //data
}

func (obj *Object) Update(channel chan int) {
    //update data
    channel <- 1
    return
}

func main() {

    channel := make(chan int, n)
    list := make([]Object, n, m)
    for {
        for _, object := range list {
            go object.Update(channel)
        }
        for i := 0; i < n; i++ {
            <-channel
        }
        //now everything has been updated. start again
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是对象的数量以及因此可能会改变goroutines的数量.是否可以更改通道的缓冲区大小?

有没有更优雅的方式来做到这一点?

concurrency channel go coroutine goroutine

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

在Coroutine中"yield return 0"和"yield return null"之间有什么区别?

我是新人,对" yield" 有点困惑.但最后我明白它是如何运作的WaitForSeconds

但我看不出" yield return 0"和" yield return null" 之间的区别.

他们都在等待下一帧执行吗?

对不起,我的英语不好.非常感谢你.

c# ienumerator yield coroutine unity-game-engine

10
推荐指数
1
解决办法
7855
查看次数

我可以在Java代码中使用它们来利用Kotlin的Coroutines吗?

我的目标是什么?

我的目标是能够使用Java中的Kotlin的Coroutine系统.我希望能够在给定的时间内暂停执行中期,然后在给定的时间过后在该位置进行备份.从Java开始,我希望能够执行允许暂停执行中的任务,而不是以异步方式执行,例如:

//example 1
someLogic();
pause(3000L); //3 seconds
someMoreLogic();

//example 2
while(true) {
    someContinuedLogic();
    pause(10000L); //10 seconds
}
Run Code Online (Sandbox Code Playgroud)

我的问题是什么?

正如预期的那样,我能够完全从Kotlin执行协同程序,但是当谈到Java时,它变得棘手,因为代码的Java部分立即执行整个块而没有任何暂停,而Kotlin块正确地暂停1,并且然后4秒.

我的问题是什么?

甚至可以使用Kotlin作为Java协程的主干吗?如果是这样,我做错了什么?下面你可以找到源代码,展示我如何尝试在Java中使用Kotlin的协同程序.

KtScript类

abstract class KtScript {

    abstract fun execute()

    fun <T> async(block: suspend () -> T): CompletableFuture<T> {
        val future = CompletableFuture<T>()
        block.startCoroutine(completion = object : Continuation<T> {
            override fun resume(value: T) {
                future.complete(value)
            }
            override fun resumeWithException(exception: Throwable) {
                future.completeExceptionally(exception)
            }
        })
        return future
    }

    suspend fun <T> await(f: CompletableFuture<T>): T =
            suspendCoroutine { c: Continuation<T> -> …
Run Code Online (Sandbox Code Playgroud)

java coroutine kotlin

10
推荐指数
1
解决办法
3958
查看次数

不对称和对称协同程序有什么区别?

我注意到在Boost.Coroutine2 for C++中删除了对对称协程的支持,所以我想了解 - 两者之间有什么区别?

coroutine

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

任何相当于Kotlin的延期

Coroutine async返回Deferred<T>,有懒惰执行和等待用法的例子.

但是,我们如何等待任何一个Deffered实例完成?

简而言之

  // whats the equivalent of CompletableFuture.anyOf(...)?
  // is this how we do it? if so how costly is this?
  select<Unit> {
     deffered1.onAwait {}
     deffered2.onAwait {}
  }
Run Code Online (Sandbox Code Playgroud)

coroutine kotlin completable-future

10
推荐指数
1
解决办法
453
查看次数

如何等待协程结束

我在下面有一些代码。延迟(3000)只是长循环(或循环)的替代。我期待循环完成后println(res)会打印“Some String”然后启用button。但在现实生活中会println(res)打印一个空字符串并button在我单击它时同时启用。我的问题是:如何等待协程结束,并且只有在协程运行println(res)button.isEnabled = true.

private var res: String = ""

private suspend fun test(): String {
    delay(3000) // delay - just replacement for long loop
    return "Some String" // String received after loop
}

fun onClick(view: View) {
    res = ""
    button.isEnabled = false
    GlobalScope.launch {
        res = withContext(Dispatchers.Default) {
            test()
        }
    }
    println(res) // 1. trying to get string received after loop, but not working
    button.isEnabled = …
Run Code Online (Sandbox Code Playgroud)

android coroutine kotlin kotlin-coroutines

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