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

Why calling yield in function cause Access Violation?

据我了解,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

来自文档:"Forces a context switch to occur away from the calling fiber."

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

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