gpt4 book ai didi

c# - 是否可以在单个线程上交错执行多个委托(delegate)?

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:17 25 4
gpt4 key购买 nike

是否可以创建如下所示的函数:

void ExecuteInterleave(Action a, Action b) {
...
}

会自动在当前线程上交替执行ab?例如,a 会运行几百毫秒,然后 b 会运行,重复。它会阻塞当前线程,直到 ab 都返回。

这个问题纯粹是从理论的角度来看的,因为我很好奇这是否可能。

最佳答案

自动 - 不,因为当前线程无法神奇地停止执行方法。

如果您能让代表在多任务处理中合作 - 可行。看起来很酷的方法是在每个委托(delegate)中使用 yield return 并且驱动程序方法将按照它想要的顺序迭代两个“序列”。

IEnumerable<int> A()
{
// cooperative step 1
yield return 0;
// cooperative step 3
yield return 0;
}

IEnumerable<int> B()
{
// cooperative step 2
yield return 0;
// cooperative step 4
yield return 0;
}

void ExecuteInterleave(Func<IEnumerable<int>> a, Func<IEnumerable<int>> b) {
var i1 = a().GetEnumerator();
var i2 = b().GetEnumerator();

i1.MoveNext();
i2.MoveNext();
i1.MoveNext();
i2.MoveNext();
}
...
ExecuteInterleave(A, B);

关于c# - 是否可以在单个线程上交错执行多个委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29288364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com