为什么在函数中调用yield会导致访问冲突?

时间:2017-02-06 11:26:55

标签: d

据我所知,yield的工作方式与return类似,但不会破坏功能的执行。

这是我的代码:

import std.stdio;
import core.thread;

void main()
{
    writeln("1");   
    foo();
    writeln("2");
}

void foo()
{
    writeln("Hello");
    Fiber.yield();
    writeln("world");
}

输出:

> app.exe
1
Hello
object.Error@(0): Access Violation

1 个答案:

答案 0 :(得分:2)

来自文档:"强制上下文切换远离调用光纤。"

调用此函数时,您不在光纤内部,因此违反了前提条件。接下来是未定义的行为。

您需要创建光纤,将&foo传递给构造函数,然后在光纤上调用.call()