我可以克隆未来吗?

2024-01-21

我想为未来编写一些通用的重试逻辑。

我知道具体的返回类型,并且想在未来重试相同的操作。

我的代码只能访问未来 - 我不想将每个 fn 调用站点包装在闭包中以启用重新创建它。

似乎“未来”是 (fn, args) 的组合,并且当.await被调用后,它会运行并等待结果。

如果我能够克隆所有参数,是否可以创建未启动的未来的克隆,以便在第一次失败时重试?


问题在于,尚未开始的未来与已经开始的未来是同一类型——未来会就地自我转变。所以虽然理论上Future could be Clone,这将对其整个生命周期中允许保持的状态施加严格的限制。对于期货实施async fn不仅初始状态(传递给的参数async fn) 不得不Clone,而且所有交叉的局部变量也会如此.await points.

一个简单的实验表明,当前async不自动执行Clone它的方式例如Send,即使对于安全的异步函数也是如此。例如:

async fn retry(f: impl Future + Clone) {
    todo!()
}

fn main() {
    // fails to compile:
    retry(async {});
    //    ^^^^^^^^ the trait `Clone` is not implemented for `impl Future`
}

我不想将每个 fn 调用站点包装在闭包中以启用重新创建它。

在这种情况下,这可能正是您需要做的。或者如果闭包需要太多样板文件,则使用某种宏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以克隆未来吗? 的相关文章

随机推荐

  • Google 地图地理编码 API 使用限制

    我目前正在使用 Google 的 Maps Geocoding API 正如文档所示 它每天的使用限制为 2500 个请求 我可以调用某些服务来检查我已经执行了多少请求 或者我仍然可以执行多少请求 我知道 Google 的 API 控制台中
  • 为什么 React Native 移动应用需要 redux?

    我是原生 Android 应用程序的经验开发人员 但我是 React Native 的入门级开发人员 我熟悉 basic 但无法理解为什么 Redux 与 React Native 一起使用 我想了解使用 java 的 Android Na
  • 如何使 $.serialize() 考虑那些禁用的 :input 元素?

    默认情况下 禁用的输入元素似乎被忽略 serialize 有解决方法吗 暂时启用它们 var myform myform Find disabled inputs and remove the disabled attribute var
  • LuaInterface - 如何限制对 .Net 类的访问?

    我正在尝试使用 LuaInterface 2 0 3 在我的 C 应用程序中嵌入一些 Lua 脚本功能 到目前为止 这工作得很好 但我不知道如何限制对少数指定的 Net 类的访问 默认情况下 所有 Net库都可以通过 luanet 直接访问
  • 克服 PHP 中的针状大海捞针混乱

    克服 PHP 中的大海捞针混乱的最实用方法是什么 这里 needle 是第一个参数 bool in array mixed needle array haystack bool strict FALSE 这里 needle 是第二个参数 s
  • ImportError:Elastic Beanstalk 中没有名为 django.core.wsgi 的模块

    我刚开始使用AWS 的弹性豆茎 我正在关注这个tutorial https realpython com blog python deploying a django app to aws elastic beanstalk to 部署 D
  • 跨继承模板组合资产资源

    我们正在使用 Symfony2 构建一个新站点 Assetic 在资源管理方面看起来非常有前途 特别是在自动组合和处理所有 js css 文件方面 我们将拥有一些在整个站点范围内使用的资源 以及一些特定于特定页面的资源 我们还将使用三层继承
  • JFreeChart SpiderWebPlot 内圈?

    所以我一直在使用 JFreeChart 尝试创建 SpiderWebPlot 到目前为止它运行良好 我想知道是否可以为可能的值添加圆圈 这样它看起来更像是一个实际的蜘蛛网 如下所示 按照建议here https stackoverflow
  • html5 可以设置制表位吗?

    我想在 html5 中设置制表位并能够将文本与它们对齐 就像在 Word 中一样 对于我的应用程序 我不能使用表格 有没有办法做到这一点 我必须使用 JavaScript 吗 尽管其他发帖者的主张与此相反 但有充分的理由想要按照OP的要求做
  • OpenCV - 将相机矩阵和畸变系数存储为 Mat

    我使用示例 OpenCV 程序计算相机矩阵和畸变系数 并生成包含相关数据的 xml 文件 我正在尝试通过使用它undistort函数 但我不确定如何将值存储为Mat Mat cameraMatrix Mat distortionCoeffi
  • 非线程安全 Singleton 中的部分构造对象

    在多线程环境中 线程怎么可能看到 部分构造的对象 我知道它不是线程安全的 因为多个线程可以创建多个实例 class LazyInit private static Resource resource null public static g
  • 如何在 Bootstrap 3 中创建响应式按钮?

    我尝试在 768px 屏幕上显示 btn sm 但它一直显示 btn xs 这是我的 HTML 代码 div class col md 6 col sm 6 col xs 12 col md offset 3 col sm offset 3
  • 如何在ggplot中命名图例中的数据? [复制]

    这个问题在这里已经有答案了 我有数据框One APD One APD structure list Amplification c 108 91 120 765 134 875 151 877 172 812 199 324 Voltage
  • Silverlight:在 XAML 中声明数据集合?

    我想在我的 Silverlight for Windows Phone 7 应用程序中声明一些数据 我不确定语法是什么 例如 public class Person public string Name get set public int
  • 如何在使用流读取文件时保留换行符 - java 8

    try Stream
  • 生成 M 个箱中 N 个球的所有排列

    我想生成一组排列n球进m垃圾箱 以下一组嵌套列表生成这些排列 n lt 3 m lt 4 v lt rep 0 m for i in n 0 for j in n sum i 0 for k in n sum i j 0 for l in
  • 敲除 javascript foreach 绑定

    我试图允许用户创建一个铸造并向该铸造对象添加一组类别 我试图使用淘汰赛的 foreach 绑定到类别数组 并让用户向铸造添加新类别 我创建了一个 jsfiddle 来说明我在这里试图解释的内容 http jsfiddle net msell
  • Ruby 中的大指数?

    我只是在做一些与大学相关的 Diffie Hellman 练习 并尝试使用 ruby 遗憾的是 Ruby 似乎无法处理大指数 警告 在 a b 中 b 可能太大 NaN 有什么办法解决吗 例如 特殊的数学课或类似的课程 附注这是有问题的代码
  • 获取 Azure 队列中的消息 ID

    有没有办法在将消息插入队列Azure后获取消息ID CloudStorageAccount storageAccount CloudStorageAccount parse storageConnectionString CloudQueu
  • 我可以克隆未来吗?

    我想为未来编写一些通用的重试逻辑 我知道具体的返回类型 并且想在未来重试相同的操作 我的代码只能访问未来 我不想将每个 fn 调用站点包装在闭包中以启用重新创建它 似乎 未来 是 fn args 的组合 并且当 await被调用后 它会运行