为什么在函数中调用 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()
。
据我了解,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()
。