C++14 的提议之一是Resumable Functions,它为 C++ 提供了当今 C# 中可用的异步/等待机制。基本思想是可以在等待异步操作完成时暂停函数。当异步操作完成时,函数可以在暂停的地方恢复。这是以非阻塞方式完成的,因此调用可恢复函数的线程不会被阻塞。
对我来说,函数将在哪个上下文(线程)中恢复并不明显。它会由暂停函数的线程恢复(据我了解,这是在 C# 中完成的)还是使用另一个线程?
如果它被暂停的线程恢复,线程是否必须处于某种特殊状态,或者调度程序会处理这个?
C++14 的提议之一是Resumable Functions,它为 C++ 提供了当今 C# 中可用的异步/等待机制。基本思想是可以在等待异步操作完成时暂停函数。当异步操作完成时,函数可以在暂停的地方恢复。这是以非阻塞方式完成的,因此调用可恢复函数的线程不会被阻塞。
对我来说,函数将在哪个上下文(线程)中恢复并不明显。它会由暂停函数的线程恢复(据我了解,这是在 C# 中完成的)还是使用另一个线程?
如果它被暂停的线程恢复,线程是否必须处于某种特殊状态,或者调度程序会处理这个?
引用 N3564:
挂起后,可恢复函数可能会被运行时的调度逻辑恢复并最终完成其逻辑,此时它会执行返回语句(显式或隐式)并将函数的结果值设置在占位符中。
因此应该注意,从外部(调用者)和内部观察到的函数行为之间存在不对称:外部视角是函数在第一个暂停点返回一个未来类型的值,而内部视角是函数通过 return 语句返回 T 类型的值,返回 future/shared_future 的函数的行为仍然有些不同。
可恢复函数可以在暂停执行后恢复后继续在另一个线程上执行。
这实质上意味着
future<T>
的不是必须处于就绪状态)。