blob: cfbde2089858c43a5a4dcadd1fcde1ebaa003be2 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" data-content_root="" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<title>Asynchronous programming &#8212; Apache Arrow v17.0.0.dev52</title>
<script data-cfasync="false">
document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
document.documentElement.dataset.theme = localStorage.getItem("theme") || "light";
</script>
<!-- Loaded before other Sphinx assets -->
<link href="../../_static/styles/theme.css?digest=8d27b9dea8ad943066ae" rel="stylesheet" />
<link href="../../_static/styles/bootstrap.css?digest=8d27b9dea8ad943066ae" rel="stylesheet" />
<link href="../../_static/styles/pydata-sphinx-theme.css?digest=8d27b9dea8ad943066ae" rel="stylesheet" />
<link href="../../_static/vendor/fontawesome/6.5.1/css/all.min.css?digest=8d27b9dea8ad943066ae" rel="stylesheet" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="../../_static/vendor/fontawesome/6.5.1/webfonts/fa-solid-900.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="../../_static/vendor/fontawesome/6.5.1/webfonts/fa-brands-400.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="../../_static/vendor/fontawesome/6.5.1/webfonts/fa-regular-400.woff2" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css" />
<link rel="stylesheet" type="text/css" href="../../_static/theme_overrides.css" />
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="../../_static/scripts/bootstrap.js?digest=8d27b9dea8ad943066ae" />
<link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=8d27b9dea8ad943066ae" />
<script src="../../_static/vendor/fontawesome/6.5.1/js/all.min.js?digest=8d27b9dea8ad943066ae"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/sphinx_highlight.js"></script>
<script src="../../_static/clipboard.min.js"></script>
<script src="../../_static/copybutton.js"></script>
<script src="../../_static/design-tabs.js"></script>
<script>DOCUMENTATION_OPTIONS.pagename = 'cpp/api/async';</script>
<script>
DOCUMENTATION_OPTIONS.theme_version = '0.15.2';
DOCUMENTATION_OPTIONS.theme_switcher_json_url = '/docs/_static/versions.json';
DOCUMENTATION_OPTIONS.theme_switcher_version_match = 'dev/';
DOCUMENTATION_OPTIONS.show_version_warning_banner = true;
</script>
<link rel="canonical" href="https://arrow.apache.org/docs/cpp/api/async.html" />
<link rel="icon" href="../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Input / output" href="io.html" />
<link rel="prev" title="Utilities" href="utilities.html" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="docsearch:language" content="en"/>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
/* We explicitly disable cookie tracking to avoid privacy issues */
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '20']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
</head>
<body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="">
<a id="pst-skip-link" class="skip-link" href="#main-content">Skip to main content</a>
<div id="pst-scroll-pixel-helper"></div>
<button type="button" class="btn rounded-pill" id="pst-back-to-top">
<i class="fa-solid fa-arrow-up"></i>
Back to top
</button>
<input type="checkbox"
class="sidebar-toggle"
name="__primary"
id="__primary"/>
<label class="overlay overlay-primary" for="__primary"></label>
<input type="checkbox"
class="sidebar-toggle"
name="__secondary"
id="__secondary"/>
<label class="overlay overlay-secondary" for="__secondary"></label>
<div class="search-button__wrapper">
<div class="search-button__overlay"></div>
<div class="search-button__search-container">
<form class="bd-search d-flex align-items-center"
action="../../search.html"
method="get">
<i class="fa-solid fa-magnifying-glass"></i>
<input type="search"
class="form-control"
name="q"
id="search-input"
placeholder="Search the docs ..."
aria-label="Search the docs ..."
autocomplete="off"
autocorrect="off"
autocapitalize="off"
spellcheck="false"/>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
</form></div>
</div>
<header class="bd-header navbar navbar-expand-lg bd-navbar">
<div class="bd-header__inner bd-page-width">
<label class="sidebar-toggle primary-toggle" for="__primary">
<span class="fa-solid fa-bars"></span>
</label>
<div class="col-lg-3 navbar-header-items__start">
<div class="navbar-item">
<a class="navbar-brand logo" href="../../index.html">
<img src="../../_static/arrow.png" class="logo__image only-light" alt="Apache Arrow v17.0.0.dev52 - Home"/>
<script>document.write(`<img src="../../_static/arrow-dark.png" class="logo__image only-dark" alt="Apache Arrow v17.0.0.dev52 - Home"/>`);</script>
</a></div>
</div>
<div class="col-lg-9 navbar-header-items">
<div class="me-auto navbar-header-items__center">
<div class="navbar-item">
<nav class="navbar-nav">
<ul class="bd-navbar-elements navbar-nav">
<li class="nav-item">
<a class="nav-link nav-internal" href="../../format/index.html">
Specifications
</a>
</li>
<li class="nav-item">
<a class="nav-link nav-internal" href="../../developers/index.html">
Development
</a>
</li>
<li class="nav-item dropdown">
<button class="btn dropdown-toggle nav-item" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-controls="pst-nav-more-links">
Implementations
</button>
<ul id="pst-nav-more-links" class="dropdown-menu">
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../c_glib/index.html">
C/GLib
</a>
</li>
<li class="nav-item current active">
<a class="nav-link dropdown-item nav-internal" href="../index.html">
C++
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/csharp/README.md">
C#
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://pkg.go.dev/github.com/apache/arrow/go/v17">
Go
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../java/index.html">
Java
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../js/index.html">
JavaScript
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/julia/">
Julia
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/matlab/README.md">
MATLAB
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/nanoarrow/">
nanoarrow
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../python/index.html">
Python
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../r/index.html">
R
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/ruby/README.md">
Ruby
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://docs.rs/crate/arrow/">
Rust
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../status.html">
Implementation Status
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/cpp/">
C++ cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/java/">
Java cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/py/">
Python cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/r/">
R cookbook
</a>
</li>
</ul>
</li>
</ul>
</nav></div>
</div>
<div class="navbar-header-items__end">
<div class="navbar-item navbar-persistent--container">
<script>
document.write(`
<button class="btn navbar-btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Search</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button>
`);
</script>
</div>
<div class="navbar-item">
<script>
document.write(`
<div class="version-switcher__container dropdown">
<button id="pst-version-switcher-button-2"
type="button"
class="version-switcher__button btn btn-sm navbar-btn dropdown-toggle"
data-bs-toggle="dropdown"
aria-haspopup="listbox"
aria-controls="pst-version-switcher-list-2"
aria-label="Version switcher list"
>
Choose version <!-- this text may get changed later by javascript -->
<span class="caret"></span>
</button>
<div id="pst-version-switcher-list-2"
class="version-switcher__menu dropdown-menu list-group-flush py-0"
role="listbox" aria-labelledby="pst-version-switcher-button-2">
<!-- dropdown will be populated by javascript on page load -->
</div>
</div>
`);
</script></div>
<div class="navbar-item">
<script>
document.write(`
<button class="btn btn-sm navbar-btn theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="theme-switch nav-link" data-mode="light"><i class="fa-solid fa-sun fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="dark"><i class="fa-solid fa-moon fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="auto"><i class="fa-solid fa-circle-half-stroke fa-lg"></i></span>
</button>
`);
</script></div>
<div class="navbar-item"><ul class="navbar-icon-links navbar-nav"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/apache/arrow" title="GitHub" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i></span>
<span class="sr-only">GitHub</span></a>
</li>
<li class="nav-item">
<a href="https://twitter.com/ApacheArrow" title="X" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-x-twitter fa-lg" aria-hidden="true"></i></span>
<span class="sr-only">X</span></a>
</li>
</ul></div>
</div>
</div>
<div class="navbar-persistent--mobile">
<script>
document.write(`
<button class="btn navbar-btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Search</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button>
`);
</script>
</div>
<label class="sidebar-toggle secondary-toggle" for="__secondary" tabindex="0">
<span class="fa-solid fa-outdent"></span>
</label>
</div>
</header>
<div class="bd-container">
<div class="bd-container__inner bd-page-width">
<div class="bd-sidebar-primary bd-sidebar">
<div class="sidebar-header-items sidebar-primary__section">
<div class="sidebar-header-items__center">
<div class="navbar-item">
<nav class="navbar-nav">
<ul class="bd-navbar-elements navbar-nav">
<li class="nav-item">
<a class="nav-link nav-internal" href="../../format/index.html">
Specifications
</a>
</li>
<li class="nav-item">
<a class="nav-link nav-internal" href="../../developers/index.html">
Development
</a>
</li>
<li class="nav-item dropdown">
<button class="btn dropdown-toggle nav-item" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-controls="pst-nav-more-links-2">
Implementations
</button>
<ul id="pst-nav-more-links-2" class="dropdown-menu">
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../c_glib/index.html">
C/GLib
</a>
</li>
<li class="nav-item current active">
<a class="nav-link dropdown-item nav-internal" href="../index.html">
C++
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/csharp/README.md">
C#
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://pkg.go.dev/github.com/apache/arrow/go/v17">
Go
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../java/index.html">
Java
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../js/index.html">
JavaScript
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/julia/">
Julia
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/matlab/README.md">
MATLAB
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/nanoarrow/">
nanoarrow
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../python/index.html">
Python
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../r/index.html">
R
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://github.com/apache/arrow/blob/main/ruby/README.md">
Ruby
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://docs.rs/crate/arrow/">
Rust
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-internal" href="../../status.html">
Implementation Status
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/cpp/">
C++ cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/java/">
Java cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/py/">
Python cookbook
</a>
</li>
<li class="nav-item">
<a class="nav-link dropdown-item nav-external" href="https://arrow.apache.org/cookbook/r/">
R cookbook
</a>
</li>
</ul>
</li>
</ul>
</nav></div>
</div>
<div class="sidebar-header-items__end">
<div class="navbar-item">
<script>
document.write(`
<div class="version-switcher__container dropdown">
<button id="pst-version-switcher-button-3"
type="button"
class="version-switcher__button btn btn-sm navbar-btn dropdown-toggle"
data-bs-toggle="dropdown"
aria-haspopup="listbox"
aria-controls="pst-version-switcher-list-3"
aria-label="Version switcher list"
>
Choose version <!-- this text may get changed later by javascript -->
<span class="caret"></span>
</button>
<div id="pst-version-switcher-list-3"
class="version-switcher__menu dropdown-menu list-group-flush py-0"
role="listbox" aria-labelledby="pst-version-switcher-button-3">
<!-- dropdown will be populated by javascript on page load -->
</div>
</div>
`);
</script></div>
<div class="navbar-item">
<script>
document.write(`
<button class="btn btn-sm navbar-btn theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="theme-switch nav-link" data-mode="light"><i class="fa-solid fa-sun fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="dark"><i class="fa-solid fa-moon fa-lg"></i></span>
<span class="theme-switch nav-link" data-mode="auto"><i class="fa-solid fa-circle-half-stroke fa-lg"></i></span>
</button>
`);
</script></div>
<div class="navbar-item"><ul class="navbar-icon-links navbar-nav"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/apache/arrow" title="GitHub" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i></span>
<span class="sr-only">GitHub</span></a>
</li>
<li class="nav-item">
<a href="https://twitter.com/ApacheArrow" title="X" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-x-twitter fa-lg" aria-hidden="true"></i></span>
<span class="sr-only">X</span></a>
</li>
</ul></div>
</div>
</div>
<div class="sidebar-primary-items__start sidebar-primary__section">
<div class="sidebar-primary-item">
<nav class="bd-docs-nav bd-links"
aria-label="Section Navigation">
<p class="bd-links__title" role="heading" aria-level="1">Section Navigation</p>
<div class="bd-toc-item navbar-nav"><ul class="current nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="../getting_started.html">Getting Started</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-1"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../build_system.html">Using Arrow C++ in your own project</a></li>
<li class="toctree-l2"><a class="reference internal" href="../conventions.html">Conventions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tutorials/basic_arrow.html">Basic Arrow Data Structures</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tutorials/io_tutorial.html">Arrow File I/O</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tutorials/compute_tutorial.html">Arrow Compute</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tutorials/datasets_tutorial.html">Arrow Datasets</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../user_guide.html">User Guide</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-2"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../overview.html">High-Level Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="../memory.html">Memory Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../arrays.html">Arrays</a></li>
<li class="toctree-l2"><a class="reference internal" href="../datatypes.html">Data Types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tables.html">Tabular Data</a></li>
<li class="toctree-l2"><a class="reference internal" href="../compute.html">Compute Functions</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../gandiva.html">The Gandiva Expression Compiler</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-3"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="../gandiva/expr_projector_filter.html">Gandiva Expression, Projector, and Filter</a></li>
<li class="toctree-l3"><a class="reference internal" href="../gandiva/external_func.html">Gandiva External Functions Development Guide</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../streaming_execution.html">Acero: A C++ streaming execution engine</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-4"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="../acero/overview.html">Acero Overview</a></li>
<li class="toctree-l3"><a class="reference internal" href="../acero/user_guide.html">Acero User’s Guide</a></li>
<li class="toctree-l3"><a class="reference internal" href="../acero/substrait.html">Using Acero with Substrait</a></li>
<li class="toctree-l3"><a class="reference internal" href="../acero/developer_guide.html">Developer’s Guide</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../io.html">Input / output and filesystems</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ipc.html">Reading and writing the Arrow IPC format</a></li>
<li class="toctree-l2"><a class="reference internal" href="../orc.html">Reading and Writing ORC files</a></li>
<li class="toctree-l2"><a class="reference internal" href="../parquet.html">Reading and writing Parquet files</a></li>
<li class="toctree-l2"><a class="reference internal" href="../csv.html">Reading and Writing CSV files</a></li>
<li class="toctree-l2"><a class="reference internal" href="../json.html">Reading JSON files</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dataset.html">Tabular Datasets</a></li>
<li class="toctree-l2"><a class="reference internal" href="../flight.html">Arrow Flight RPC</a></li>
<li class="toctree-l2"><a class="reference internal" href="../gdb.html">Debugging code using Arrow</a></li>
<li class="toctree-l2"><a class="reference internal" href="../threading.html">Thread Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../opentelemetry.html">OpenTelemetry</a></li>
<li class="toctree-l2"><a class="reference internal" href="../env_vars.html">Environment Variables</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../examples/index.html">Examples</a><input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-5"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../examples/cmake_minimal_build.html">Minimal build using CMake</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples/compute_and_write_example.html">Compute and Write CSV Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples/dataset_documentation_example.html">Arrow Datasets example</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples/dataset_skyhook_scan_example.html">Arrow Skyhook example</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples/row_columnar_conversion.html">Row to columnar conversion</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples/tuple_range_conversion.html">std::tuple-like ranges to Arrow</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples/converting_recordbatch_to_tensor.html">Converting RecordBatch to Tensor</a></li>
</ul>
</li>
<li class="toctree-l1 current active has-children"><a class="reference internal" href="../api.html">API Reference</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-6"><i class="fa-solid fa-chevron-down"></i></label><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="support.html">Programming Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="memory.html">Memory (management)</a></li>
<li class="toctree-l2"><a class="reference internal" href="thread.html">Thread (management)</a></li>
<li class="toctree-l2"><a class="reference internal" href="datatype.html">Data Types</a></li>
<li class="toctree-l2"><a class="reference internal" href="array.html">Arrays</a></li>
<li class="toctree-l2"><a class="reference internal" href="scalar.html">Scalars</a></li>
<li class="toctree-l2"><a class="reference internal" href="builder.html">Array Builders</a></li>
<li class="toctree-l2"><a class="reference internal" href="table.html">Two-dimensional Datasets</a></li>
<li class="toctree-l2"><a class="reference internal" href="c_abi.html">C Interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="compute.html">Compute Functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="acero.html">Streaming Execution (Acero)</a></li>
<li class="toctree-l2"><a class="reference internal" href="gandiva.html">Gandiva Expression Compiler</a></li>
<li class="toctree-l2"><a class="reference internal" href="tensor.html">Tensors</a></li>
<li class="toctree-l2"><a class="reference internal" href="utilities.html">Utilities</a></li>
<li class="toctree-l2 current active"><a class="current reference internal" href="#">Asynchronous programming</a></li>
<li class="toctree-l2"><a class="reference internal" href="io.html">Input / output</a></li>
<li class="toctree-l2"><a class="reference internal" href="ipc.html">Arrow IPC</a></li>
<li class="toctree-l2"><a class="reference internal" href="formats.html">File Formats</a></li>
<li class="toctree-l2"><a class="reference internal" href="cuda.html">CUDA support</a></li>
<li class="toctree-l2"><a class="reference internal" href="flight.html">Arrow Flight RPC</a></li>
<li class="toctree-l2"><a class="reference internal" href="flightsql.html">Arrow Flight SQL</a></li>
<li class="toctree-l2"><a class="reference internal" href="filesystem.html">Filesystems</a></li>
<li class="toctree-l2"><a class="reference internal" href="dataset.html">Dataset</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://arrow.apache.org/cookbook/cpp/">C++ cookbook</a></li>
</ul>
</div>
</nav></div>
</div>
<div class="sidebar-primary-items__end sidebar-primary__section">
</div>
<div id="rtd-footer-container"></div>
</div>
<main id="main-content" class="bd-main">
<div class="bd-content">
<div class="bd-article-container">
<div class="bd-header-article">
<div class="header-article-items header-article__inner">
<div class="header-article-items__start">
<div class="header-article-item">
<nav aria-label="Breadcrumb">
<ul class="bd-breadcrumbs">
<li class="breadcrumb-item breadcrumb-home">
<a href="../../index.html" class="nav-link" aria-label="Home">
<i class="fa-solid fa-home"></i>
</a>
</li>
<li class="breadcrumb-item"><a href="../index.html" class="nav-link">C++ Implementation</a></li>
<li class="breadcrumb-item"><a href="../api.html" class="nav-link">API Reference</a></li>
<li class="breadcrumb-item active" aria-current="page">Asynchronous...</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div id="searchbox"></div>
<article class="bd-article">
<section id="asynchronous-programming">
<h1>Asynchronous programming<a class="headerlink" href="#asynchronous-programming" title="Permalink to this heading">#</a></h1>
<section id="futures">
<h2>Futures<a class="headerlink" href="#futures" title="Permalink to this heading">#</a></h2>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4I0EN5arrow6FutureE">
<span id="_CPPv3I0EN5arrow6FutureE"></span><span id="_CPPv2I0EN5arrow6FutureE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">T</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classarrow_1_1_future"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Future</span></span></span><a class="headerlink" href="#_CPPv4I0EN5arrow6FutureE" title="Permalink to this definition">#</a><br /></dt>
<dd><p>EXPERIMENTAL A std::future-like class with more functionality. </p>
<p>A <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> represents the results of a past or future computation. The <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> API has two sides: a producer side and a consumer side.</p>
<p>The producer API allows creating a <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> and setting its result or status, possibly after running a computation function.</p>
<p>The consumer API allows querying a <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a>’s current state, wait for it to complete, and composing futures with callbacks. </p>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK5arrow6Future5stateEv">
<span id="_CPPv3NK5arrow6Future5stateEv"></span><span id="_CPPv2NK5arrow6Future5stateEv"></span><span id="arrow::Future::stateC"></span><span class="target" id="classarrow_1_1_future_1af5ed07708946f090bb76f7544f68e483"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">FutureState</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">state</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK5arrow6Future5stateEv" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Return the <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a>’s current state. </p>
<p>A return value of PENDING is only indicative, as the <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> can complete concurrently. A return value of FAILURE or SUCCESS is definitive, though. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK5arrow6Future11is_finishedEv">
<span id="_CPPv3NK5arrow6Future11is_finishedEv"></span><span id="_CPPv2NK5arrow6Future11is_finishedEv"></span><span id="arrow::Future::is_finishedC"></span><span class="target" id="classarrow_1_1_future_1a0ecef7e4c4cb133d5855c8527a63d016"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">is_finished</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK5arrow6Future11is_finishedEv" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Whether the <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> is finished. </p>
<p>A false return value is only indicative, as the <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> can complete concurrently. A true return value is definitive, though. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NKR5arrow6Future6resultEv">
<span id="_CPPv3NKR5arrow6Future6resultEv"></span><span id="_CPPv2NKR5arrow6Future6resultEv"></span><span id="arrow::Future::resultCR"></span><span class="target" id="classarrow_1_1_future_1a012f27852d0e7e845fe624d47507e4aa"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="support.html#_CPPv4I0EN5arrow6ResultE" title="arrow::Result"><span class="n"><span class="pre">Result</span></span></a><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">ValueType</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="n"><span class="pre">result</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><a class="headerlink" href="#_CPPv4NKR5arrow6Future6resultEv" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Wait for the <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> to complete and return its <a class="reference internal" href="support.html#classarrow_1_1_result"><span class="std std-ref">Result</span></a>. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N5arrow6Future10MoveResultEv">
<span id="_CPPv3N5arrow6Future10MoveResultEv"></span><span id="_CPPv2N5arrow6Future10MoveResultEv"></span><span id="arrow::Future::MoveResult"></span><span class="target" id="classarrow_1_1_future_1a7ab9d936aa3fc4531e71a74f281e3bed"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="support.html#_CPPv4I0EN5arrow6ResultE" title="arrow::Result"><span class="n"><span class="pre">Result</span></span></a><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">ValueType</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="n"><span class="pre">MoveResult</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N5arrow6Future10MoveResultEv" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Returns an rvalue to the result. </p>
<p>This method is potentially unsafe</p>
<p>The future is not the unique owner of the result, copies of a future will also point to the same result. You must make sure that no other copies of the future exist. Attempts to add callbacks after you move the result will result in undefined behavior. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK5arrow6Future6statusEv">
<span id="_CPPv3NK5arrow6Future6statusEv"></span><span id="_CPPv2NK5arrow6Future6statusEv"></span><span id="arrow::Future::statusC"></span><span class="target" id="classarrow_1_1_future_1a2984e63ac57e89a6c73172c6e4d36eef"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><a class="reference internal" href="support.html#_CPPv4N5arrow6StatusE" title="arrow::Status"><span class="n"><span class="pre">Status</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="sig-name descname"><span class="n"><span class="pre">status</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK5arrow6Future6statusEv" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Wait for the <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> to complete and return its <a class="reference internal" href="support.html#classarrow_1_1_status"><span class="std std-ref">Status</span></a>. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK5arrow6Futurecv6FutureEv">
<span id="_CPPv3NK5arrow6Futurecv6FutureEv"></span><span id="_CPPv2NK5arrow6Futurecv6FutureEv"></span><span id="arrow::Future::castto-Future-operatorC"></span><span class="target" id="classarrow_1_1_future_1a380950c7d8ae393e5000dc357ee01dcb"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">explicit</span></span><span class="w"> </span><span class="sig-name descname"><span class="k"><span class="pre">operator</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0EN5arrow6FutureE" title="arrow::Future"><span class="n"><span class="pre">Future</span></span></a></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK5arrow6Futurecv6FutureEv" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Future&lt;T&gt; is convertible to Future&lt;&gt;, which views only the <a class="reference internal" href="support.html#classarrow_1_1_status"><span class="std std-ref">Status</span></a> of the original. </p>
<p>Marking the returned <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> Finished is not supported. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK5arrow6Future4WaitEv">
<span id="_CPPv3NK5arrow6Future4WaitEv"></span><span id="_CPPv2NK5arrow6Future4WaitEv"></span><span id="arrow::Future::WaitC"></span><span class="target" id="classarrow_1_1_future_1aa0af9b784ec0ebf42360f1c64b3fdf4c"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Wait</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK5arrow6Future4WaitEv" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Wait for the <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> to complete. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK5arrow6Future4WaitEd">
<span id="_CPPv3NK5arrow6Future4WaitEd"></span><span id="_CPPv2NK5arrow6Future4WaitEd"></span><span id="arrow::Future::Wait__doubleC"></span><span class="target" id="classarrow_1_1_future_1aef547d9d980e9d011812886ba0f6fae2"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Wait</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">double</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">seconds</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK5arrow6Future4WaitEd" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Wait for the <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> to complete, or for the timeout to expire. </p>
<p><code class="docutils literal notranslate"><span class="pre">true</span></code> is returned if the <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> completed, <code class="docutils literal notranslate"><span class="pre">false</span></code> if the timeout expired. Note a <code class="docutils literal notranslate"><span class="pre">false</span></code> value is only indicative, as the <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> can complete concurrently. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N5arrow6Future12MarkFinishedE6ResultI9ValueTypeE">
<span id="_CPPv3N5arrow6Future12MarkFinishedE6ResultI9ValueTypeE"></span><span id="_CPPv2N5arrow6Future12MarkFinishedE6ResultI9ValueTypeE"></span><span id="arrow::Future::MarkFinished__Result:ValueType:"></span><span class="target" id="classarrow_1_1_future_1a8520e88911e8360fedc372a5b2f52d7d"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">MarkFinished</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="support.html#_CPPv4I0EN5arrow6ResultE" title="arrow::Result"><span class="n"><span class="pre">Result</span></span></a><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">ValueType</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">res</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N5arrow6Future12MarkFinishedE6ResultI9ValueTypeE" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Producer API: mark <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> finished. </p>
<p>The <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a>’s result is set to <code class="docutils literal notranslate"><span class="pre">res</span></code>. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4I00EN5arrow6Future12MarkFinishedEv6Status">
<span id="_CPPv3I00EN5arrow6Future12MarkFinishedE6Status"></span><span id="_CPPv2I00EN5arrow6Future12MarkFinishedE6Status"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">E</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">ValueType</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">enable_if</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">is_same</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I00EN5arrow6Future12MarkFinishedEv6Status" title="arrow::Future::MarkFinished::E"><span class="n"><span class="pre">E</span></span></a><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">internal</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">Empty</span></span><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">value</span></span><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">type</span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classarrow_1_1_future_1a395561170c90d1c371a84734789702c8"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">MarkFinished</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="support.html#_CPPv4N5arrow6StatusE" title="arrow::Status"><span class="n"><span class="pre">Status</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">s</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><a class="reference internal" href="support.html#_CPPv4N5arrow6StatusE" title="arrow::Status"><span class="n"><span class="pre">Status</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="support.html#_CPPv4N5arrow6Status2OKEv" title="arrow::Status::OK"><span class="n"><span class="pre">OK</span></span></a><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">)</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I00EN5arrow6Future12MarkFinishedEv6Status" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Mark a Future&lt;&gt; completed with the provided <a class="reference internal" href="support.html#classarrow_1_1_status"><span class="std std-ref">Status</span></a>. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4I00ENK5arrow6Future11AddCallbackEv10OnComplete15CallbackOptions">
<span id="_CPPv3I00ENK5arrow6Future11AddCallbackE10OnComplete15CallbackOptions"></span><span id="_CPPv2I00ENK5arrow6Future11AddCallbackE10OnComplete15CallbackOptions"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OnComplete</span></span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Callback</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">WrapOnComplete</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I00ENK5arrow6Future11AddCallbackEv10OnComplete15CallbackOptions" title="arrow::Future::AddCallback::OnComplete"><span class="n"><span class="pre">OnComplete</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classarrow_1_1_future_1a18321d438167606e644961b9e253fd25"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">AddCallback</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4I00ENK5arrow6Future11AddCallbackEv10OnComplete15CallbackOptions" title="arrow::Future::AddCallback::OnComplete"><span class="n"><span class="pre">OnComplete</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">on_complete</span></span>, <span class="n"><span class="pre">CallbackOptions</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">opts</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">CallbackOptions</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">Defaults</span></span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">)</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4I00ENK5arrow6Future11AddCallbackEv10OnComplete15CallbackOptions" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Consumer API: Register a callback to run when this future completes. </p>
<p>The callback should receive the result of the future (const Result&lt;T&gt;&amp;) For a void or statusy future this should be (const <a class="reference internal" href="support.html#classarrow_1_1_status"><span class="std std-ref">Status</span></a>&amp;)</p>
<p>There is no guarantee to the order in which callbacks will run. In particular, callbacks added while the future is being marked complete may be executed immediately, ahead of, or even the same time as, other callbacks that have been previously added.</p>
<p>WARNING: callbacks may hold arbitrary references, including cyclic references. Since callbacks will only be destroyed after they are invoked, this can lead to memory leaks if a <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> is never marked finished (abandoned):</p>
<p>{ auto fut = <a class="reference internal" href="#classarrow_1_1_future_1a100c35295441f491f161120c815091f2"><span class="std std-ref">Future&lt;&gt;::Make()</span></a>; fut.AddCallback([fut]() {}); }</p>
<p>In this example <code class="docutils literal notranslate"><span class="pre">fut</span></code> falls out of scope but is not destroyed because it holds a cyclic reference to itself through the callback. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4I000ENK5arrow6Future14TryAddCallbackEb15CallbackFactory15CallbackOptions">
<span id="_CPPv3I000ENK5arrow6Future14TryAddCallbackE15CallbackFactory15CallbackOptions"></span><span id="_CPPv2I000ENK5arrow6Future14TryAddCallbackE15CallbackFactory15CallbackOptions"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">CallbackFactory</span></span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OnComplete</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">detail</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">result_of_t</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I000ENK5arrow6Future14TryAddCallbackEb15CallbackFactory15CallbackOptions" title="arrow::Future::TryAddCallback::CallbackFactory"><span class="n"><span class="pre">CallbackFactory</span></span></a><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Callback</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">WrapOnComplete</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I000ENK5arrow6Future14TryAddCallbackEb15CallbackFactory15CallbackOptions" title="arrow::Future::TryAddCallback::OnComplete"><span class="n"><span class="pre">OnComplete</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classarrow_1_1_future_1a08fe42019c357148bcf7d4059181d5b8"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">TryAddCallback</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4I000ENK5arrow6Future14TryAddCallbackEb15CallbackFactory15CallbackOptions" title="arrow::Future::TryAddCallback::CallbackFactory"><span class="n"><span class="pre">CallbackFactory</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">callback_factory</span></span>, <span class="n"><span class="pre">CallbackOptions</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">opts</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">CallbackOptions</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">Defaults</span></span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">)</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4I000ENK5arrow6Future14TryAddCallbackEb15CallbackFactory15CallbackOptions" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Overload of AddCallback that will return false instead of running synchronously. </p>
<p>This overload will guarantee the callback is never run synchronously. If the future is already finished then it will simply return false. This can be useful to avoid stack overflow in a situation where you have recursive Futures. For an example see the Loop function</p>
<p>Takes in a callback factory function to allow moving callbacks (the factory function will only be called if the callback can successfully be added)</p>
<p>Returns true if a callback was actually added and false if the callback failed to add because the future was marked complete. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4I0000ENK5arrow6Future4ThenE15ContinuedFuture9OnSuccess9OnFailure15CallbackOptions">
<span id="_CPPv3I0000ENK5arrow6Future4ThenE9OnSuccess9OnFailure15CallbackOptions"></span><span id="_CPPv2I0000ENK5arrow6Future4ThenE9OnSuccess9OnFailure15CallbackOptions"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OnSuccess</span></span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OnFailure</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0EN5arrow6Future17PassthruOnFailureE" title="arrow::Future::PassthruOnFailure"><span class="n"><span class="pre">PassthruOnFailure</span></span></a><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0000ENK5arrow6Future4ThenE15ContinuedFuture9OnSuccess9OnFailure15CallbackOptions" title="arrow::Future::Then::OnSuccess"><span class="n"><span class="pre">OnSuccess</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OnComplete</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I00EN5arrow6Future14ThenOnCompleteE" title="arrow::Future::ThenOnComplete"><span class="n"><span class="pre">ThenOnComplete</span></span></a><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0000ENK5arrow6Future4ThenE15ContinuedFuture9OnSuccess9OnFailure15CallbackOptions" title="arrow::Future::Then::OnSuccess"><span class="n"><span class="pre">OnSuccess</span></span></a><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0000ENK5arrow6Future4ThenE15ContinuedFuture9OnSuccess9OnFailure15CallbackOptions" title="arrow::Future::Then::OnFailure"><span class="n"><span class="pre">OnFailure</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ContinuedFuture</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0000ENK5arrow6Future4ThenE15ContinuedFuture9OnSuccess9OnFailure15CallbackOptions" title="arrow::Future::Then::OnComplete"><span class="n"><span class="pre">OnComplete</span></span></a><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">ContinuedFuture</span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classarrow_1_1_future_1ad330592b4f7512f4364f0a6b4b085d60"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0000ENK5arrow6Future4ThenE15ContinuedFuture9OnSuccess9OnFailure15CallbackOptions" title="arrow::Future::Then::ContinuedFuture"><span class="n"><span class="pre">ContinuedFuture</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Then</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4I0000ENK5arrow6Future4ThenE15ContinuedFuture9OnSuccess9OnFailure15CallbackOptions" title="arrow::Future::Then::OnSuccess"><span class="n"><span class="pre">OnSuccess</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">on_success</span></span>, <a class="reference internal" href="#_CPPv4I0000ENK5arrow6Future4ThenE15ContinuedFuture9OnSuccess9OnFailure15CallbackOptions" title="arrow::Future::Then::OnFailure"><span class="n"><span class="pre">OnFailure</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">on_failure</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="p"><span class="pre">{</span></span><span class="p"><span class="pre">}</span></span>, <span class="n"><span class="pre">CallbackOptions</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">options</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">CallbackOptions</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">Defaults</span></span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">)</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4I0000ENK5arrow6Future4ThenE15ContinuedFuture9OnSuccess9OnFailure15CallbackOptions" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Consumer API: Register a continuation to run when this future completes. </p>
<p>The continuation will run in the same thread that called MarkFinished (whatever callback is registered with this function will run before MarkFinished returns). Avoid long-running callbacks in favor of submitting a task to an Executor and returning the future.</p>
<p>Two callbacks are supported:<ul class="simple">
<li><p>OnSuccess, called with the result (const ValueType&amp;) on successful completion. for an empty future this will be called with nothing ()</p></li>
<li><p>OnFailure, called with the error (const <a class="reference internal" href="support.html#classarrow_1_1_status"><span class="std std-ref">Status</span></a>&amp;) on failed completion. This callback is optional and defaults to a passthru of any errors.</p></li>
</ul>
</p>
<p><a class="reference internal" href="#classarrow_1_1_future_1ad330592b4f7512f4364f0a6b4b085d60"><span class="std std-ref">Then()</span></a> returns a <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> whose ValueType is derived from the return type of the callbacks. If a callback returns:<ul class="simple">
<li><p>void, a Future&lt;&gt; will be returned which will completes successfully as soon as the callback runs.</p></li>
<li><p><a class="reference internal" href="support.html#classarrow_1_1_status"><span class="std std-ref">Status</span></a>, a Future&lt;&gt; will be returned which will complete with the returned <a class="reference internal" href="support.html#classarrow_1_1_status"><span class="std std-ref">Status</span></a> as soon as the callback runs.</p></li>
<li><p>V or Result&lt;V&gt;, a <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future&lt;V&gt;</span></a> will be returned which will complete with the result of invoking the callback as soon as the callback runs.</p></li>
<li><p><a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future&lt;V&gt;</span></a>, a <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future&lt;V&gt;</span></a> will be returned which will be marked complete when the future returned by the callback completes (and will complete with the same result).</p></li>
</ul>
</p>
<p>The continued <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> type must be the same for both callbacks.</p>
<p>Note that OnFailure can swallow errors, allowing continued Futures to successfully complete even if this <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> fails.</p>
<p>If this future is already completed then the callback will be run immediately and the returned future may already be marked complete.</p>
<p>See AddCallback for general considerations when writing callbacks. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N5arrow6Future6FutureE9ValueType">
<span id="_CPPv3N5arrow6Future6FutureE9ValueType"></span><span id="_CPPv2N5arrow6Future6FutureE9ValueType"></span><span id="arrow::Future::Future__ValueType"></span><span class="target" id="classarrow_1_1_future_1a888a51658a9da001c5d63bada01bb72c"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Future</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">ValueType</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">val</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N5arrow6Future6FutureE9ValueType" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Implicit constructor to create a finished future from a value. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N5arrow6Future6FutureE6ResultI9ValueTypeE">
<span id="_CPPv3N5arrow6Future6FutureE6ResultI9ValueTypeE"></span><span id="_CPPv2N5arrow6Future6FutureE6ResultI9ValueTypeE"></span><span id="arrow::Future::Future__Result:ValueType:"></span><span class="target" id="classarrow_1_1_future_1af7edbde4b3074226bb9e934913431b8d"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Future</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="support.html#_CPPv4I0EN5arrow6ResultE" title="arrow::Result"><span class="n"><span class="pre">Result</span></span></a><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">ValueType</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">res</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N5arrow6Future6FutureE6ResultI9ValueTypeE" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Implicit constructor to create a future from a <a class="reference internal" href="support.html#classarrow_1_1_result"><span class="std std-ref">Result</span></a>, enabling use of macros like ARROW_ASSIGN_OR_RAISE. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N5arrow6Future6FutureE6Status">
<span id="_CPPv3N5arrow6Future6FutureE6Status"></span><span id="_CPPv2N5arrow6Future6FutureE6Status"></span><span id="arrow::Future::Future__Status"></span><span class="target" id="classarrow_1_1_future_1a41aa2e2724e86be4f55106d47f1bf8c0"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Future</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="support.html#_CPPv4N5arrow6StatusE" title="arrow::Status"><span class="n"><span class="pre">Status</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">s</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N5arrow6Future6FutureE6Status" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Implicit constructor to create a future from a <a class="reference internal" href="support.html#classarrow_1_1_status"><span class="std std-ref">Status</span></a>, enabling use of macros like ARROW_RETURN_NOT_OK. </p>
</dd></dl>
</div>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-static-functions">Public Static Functions</p>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N5arrow6Future4MakeEv">
<span id="_CPPv3N5arrow6Future4MakeEv"></span><span id="_CPPv2N5arrow6Future4MakeEv"></span><span id="arrow::Future::Make"></span><span class="target" id="classarrow_1_1_future_1a100c35295441f491f161120c815091f2"></span><span class="k"><span class="pre">static</span></span><span class="w"> </span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0EN5arrow6FutureE" title="arrow::Future"><span class="n"><span class="pre">Future</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Make</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N5arrow6Future4MakeEv" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Producer API: instantiate a valid <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a>. </p>
<p>The <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a>’s state is initialized with PENDING. If you are creating a future with this method you must ensure that future is eventually completed (with success or failure). Creating a future, returning it, and never completing the future can lead to memory leaks (for example, see Loop). </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N5arrow6Future12MakeFinishedE6ResultI9ValueTypeE">
<span id="_CPPv3N5arrow6Future12MakeFinishedE6ResultI9ValueTypeE"></span><span id="_CPPv2N5arrow6Future12MakeFinishedE6ResultI9ValueTypeE"></span><span id="arrow::Future::MakeFinished__Result:ValueType:"></span><span class="target" id="classarrow_1_1_future_1a4100d156f67048e6d91b549dfd92fab6"></span><span class="k"><span class="pre">static</span></span><span class="w"> </span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0EN5arrow6FutureE" title="arrow::Future"><span class="n"><span class="pre">Future</span></span></a><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">ValueType</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">MakeFinished</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="support.html#_CPPv4I0EN5arrow6ResultE" title="arrow::Result"><span class="n"><span class="pre">Result</span></span></a><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">ValueType</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">res</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N5arrow6Future12MakeFinishedE6ResultI9ValueTypeE" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Producer API: instantiate a finished <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a>. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4I00EN5arrow6Future12MakeFinishedE6Future6Status">
<span id="_CPPv3I00EN5arrow6Future12MakeFinishedE6Status"></span><span id="_CPPv2I00EN5arrow6Future12MakeFinishedE6Status"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">E</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">ValueType</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">enable_if</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">is_same</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I00EN5arrow6Future12MakeFinishedE6Future6Status" title="arrow::Future::MakeFinished::E"><span class="n"><span class="pre">E</span></span></a><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">internal</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">Empty</span></span><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">value</span></span><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">type</span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classarrow_1_1_future_1a73d0601623d508d8ce920f5a56b13cc9"></span><span class="k"><span class="pre">static</span></span><span class="w"> </span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4I0EN5arrow6FutureE" title="arrow::Future"><span class="n"><span class="pre">Future</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">MakeFinished</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="support.html#_CPPv4N5arrow6StatusE" title="arrow::Status"><span class="n"><span class="pre">Status</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">s</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><a class="reference internal" href="support.html#_CPPv4N5arrow6StatusE" title="arrow::Status"><span class="n"><span class="pre">Status</span></span></a><span class="p"><span class="pre">::</span></span><a class="reference internal" href="support.html#_CPPv4N5arrow6Status2OKEv" title="arrow::Status::OK"><span class="n"><span class="pre">OK</span></span></a><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">)</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I00EN5arrow6Future12MakeFinishedE6Future6Status" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Make a finished Future&lt;&gt; with the provided <a class="reference internal" href="support.html#classarrow_1_1_status"><span class="std std-ref">Status</span></a>. </p>
</dd></dl>
</div>
<dl class="cpp struct">
<dt class="sig sig-object cpp" id="_CPPv4I0EN5arrow6Future17PassthruOnFailureE">
<span id="_CPPv3I0EN5arrow6Future17PassthruOnFailureE"></span><span id="_CPPv2I0EN5arrow6Future17PassthruOnFailureE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OnSuccess</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="structarrow_1_1_future_1_1_passthru_on_failure"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PassthruOnFailure</span></span></span><a class="headerlink" href="#_CPPv4I0EN5arrow6Future17PassthruOnFailureE" title="Permalink to this definition">#</a><br /></dt>
<dd></dd></dl>
<dl class="cpp struct">
<dt class="sig sig-object cpp" id="_CPPv4I00EN5arrow6Future14ThenOnCompleteE">
<span id="_CPPv3I00EN5arrow6Future14ThenOnCompleteE"></span><span id="_CPPv2I00EN5arrow6Future14ThenOnCompleteE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OnSuccess</span></span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OnFailure</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="structarrow_1_1_future_1_1_then_on_complete"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ThenOnComplete</span></span></span><a class="headerlink" href="#_CPPv4I00EN5arrow6Future14ThenOnCompleteE" title="Permalink to this definition">#</a><br /></dt>
<dd><dl class="cpp struct">
<dt class="sig sig-object cpp" id="_CPPv4N5arrow6Future14ThenOnComplete14DummyOnSuccessE">
<span id="_CPPv3N5arrow6Future14ThenOnComplete14DummyOnSuccessE"></span><span id="_CPPv2N5arrow6Future14ThenOnComplete14DummyOnSuccessE"></span><span id="arrow::Future::ThenOnComplete::DummyOnSuccess"></span><span class="target" id="structarrow_1_1_future_1_1_then_on_complete_1_1_dummy_on_success"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">DummyOnSuccess</span></span></span><a class="headerlink" href="#_CPPv4N5arrow6Future14ThenOnComplete14DummyOnSuccessE" title="Permalink to this definition">#</a><br /></dt>
<dd></dd></dl>
</dd></dl>
<dl class="cpp struct">
<dt class="sig sig-object cpp" id="_CPPv4N5arrow6Future20WrapResultOnCompleteE">
<span id="_CPPv3N5arrow6Future20WrapResultOnCompleteE"></span><span id="_CPPv2N5arrow6Future20WrapResultOnCompleteE"></span><span id="arrow::Future::WrapResultOnComplete"></span><span class="target" id="structarrow_1_1_future_1_1_wrap_result_on_complete"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">WrapResultOnComplete</span></span></span><a class="headerlink" href="#_CPPv4N5arrow6Future20WrapResultOnCompleteE" title="Permalink to this definition">#</a><br /></dt>
<dd><dl class="cpp struct">
<dt class="sig sig-object cpp" id="_CPPv4I0EN5arrow6Future20WrapResultOnComplete8CallbackE">
<span id="_CPPv3I0EN5arrow6Future20WrapResultOnComplete8CallbackE"></span><span id="_CPPv2I0EN5arrow6Future20WrapResultOnComplete8CallbackE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OnComplete</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="structarrow_1_1_future_1_1_wrap_result_on_complete_1_1_callback"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Callback</span></span></span><a class="headerlink" href="#_CPPv4I0EN5arrow6Future20WrapResultOnComplete8CallbackE" title="Permalink to this definition">#</a><br /></dt>
<dd></dd></dl>
</dd></dl>
<dl class="cpp struct">
<dt class="sig sig-object cpp" id="_CPPv4N5arrow6Future21WrapStatusyOnCompleteE">
<span id="_CPPv3N5arrow6Future21WrapStatusyOnCompleteE"></span><span id="_CPPv2N5arrow6Future21WrapStatusyOnCompleteE"></span><span id="arrow::Future::WrapStatusyOnComplete"></span><span class="target" id="structarrow_1_1_future_1_1_wrap_statusy_on_complete"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">WrapStatusyOnComplete</span></span></span><a class="headerlink" href="#_CPPv4N5arrow6Future21WrapStatusyOnCompleteE" title="Permalink to this definition">#</a><br /></dt>
<dd><dl class="cpp struct">
<dt class="sig sig-object cpp" id="_CPPv4I0EN5arrow6Future21WrapStatusyOnComplete8CallbackE">
<span id="_CPPv3I0EN5arrow6Future21WrapStatusyOnComplete8CallbackE"></span><span id="_CPPv2I0EN5arrow6Future21WrapStatusyOnComplete8CallbackE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">OnComplete</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="structarrow_1_1_future_1_1_wrap_statusy_on_complete_1_1_callback"></span><span class="k"><span class="pre">struct</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Callback</span></span></span><a class="headerlink" href="#_CPPv4I0EN5arrow6Future21WrapStatusyOnComplete8CallbackE" title="Permalink to this definition">#</a><br /></dt>
<dd></dd></dl>
</dd></dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4I0E10DeferNotOk6FutureI1TE6ResultI6FutureI1TEE">
<span id="_CPPv3I0E10DeferNotOk6ResultI6FutureI1TEE"></span><span id="_CPPv2I0E10DeferNotOk6ResultI6FutureI1TEE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">T</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="group__future-utilities_1ga4f02a3844c6d61e71d8c7ac7035d9053"></span><span class="k"><span class="pre">static</span></span><span class="w"> </span><span class="n"><span class="pre">Future</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0E10DeferNotOk6FutureI1TE6ResultI6FutureI1TEE" title="DeferNotOk::T"><span class="n"><span class="pre">T</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">DeferNotOk</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">Result</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">Future</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0E10DeferNotOk6FutureI1TE6ResultI6FutureI1TEE" title="DeferNotOk::T"><span class="n"><span class="pre">T</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">maybe_future</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I0E10DeferNotOk6FutureI1TE6ResultI6FutureI1TEE" title="Permalink to this definition">#</a><br /></dt>
<dd><p>If a Result&lt;Future&gt; holds an error instead of a <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a>, construct a finished <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> holding that error. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4I0E3All6FutureINSt6vectorI6ResultI1TEEEENSt6vectorI6FutureI1TEEE">
<span id="_CPPv3I0E3AllNSt6vectorI6FutureI1TEEE"></span><span id="_CPPv2I0E3AllNSt6vectorI6FutureI1TEEE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">T</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="group__future-utilities_1gaa042b830da9a386939fa237f313cb63a"></span><span class="n"><span class="pre">Future</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">vector</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">Result</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0E3All6FutureINSt6vectorI6ResultI1TEEEENSt6vectorI6FutureI1TEEE" title="All::T"><span class="n"><span class="pre">T</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">All</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">vector</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">Future</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="#_CPPv4I0E3All6FutureINSt6vectorI6ResultI1TEEEENSt6vectorI6FutureI1TEEE" title="All::T"><span class="n"><span class="pre">T</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">futures</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I0E3All6FutureINSt6vectorI6ResultI1TEEEENSt6vectorI6FutureI1TEEE" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Create a <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> which completes when all of <code class="docutils literal notranslate"><span class="pre">futures</span></code> complete. </p>
<p>The future’s result is a vector of the results of <code class="docutils literal notranslate"><span class="pre">futures</span></code>. Note that this future will never be marked “failed”; failed results will be stored in the result vector alongside successful results. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv411AllCompleteRKNSt6vectorI6FutureIEEE">
<span id="_CPPv311AllCompleteRKNSt6vectorI6FutureIEEE"></span><span id="_CPPv211AllCompleteRKNSt6vectorI6FutureIEEE"></span><span id="AllComplete__std::vector:Future:::CR"></span><span class="target" id="group__future-utilities_1ga2ba37e01fe7bf9f7812545b71effcd25"></span><span class="n"><span class="pre">Future</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">AllComplete</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">vector</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">Future</span></span><span class="p"><span class="pre">&lt;</span></span><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">futures</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv411AllCompleteRKNSt6vectorI6FutureIEEE" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Create a <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> which completes when all of <code class="docutils literal notranslate"><span class="pre">futures</span></code> complete. </p>
<p>The future will be marked complete if all <code class="docutils literal notranslate"><span class="pre">futures</span></code> complete successfully. Otherwise, it will be marked failed with the status of the first failing future. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv411AllFinishedRKNSt6vectorI6FutureIEEE">
<span id="_CPPv311AllFinishedRKNSt6vectorI6FutureIEEE"></span><span id="_CPPv211AllFinishedRKNSt6vectorI6FutureIEEE"></span><span id="AllFinished__std::vector:Future:::CR"></span><span class="target" id="group__future-utilities_1ga66ce91c3b172dffde75953f687ac59de"></span><span class="n"><span class="pre">Future</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">AllFinished</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">vector</span></span><span class="p"><span class="pre">&lt;</span></span><span class="n"><span class="pre">Future</span></span><span class="p"><span class="pre">&lt;</span></span><span class="p"><span class="pre">&gt;</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">futures</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv411AllFinishedRKNSt6vectorI6FutureIEEE" title="Permalink to this definition">#</a><br /></dt>
<dd><p>Create a <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> which completes when all of <code class="docutils literal notranslate"><span class="pre">futures</span></code> complete. </p>
<p>The future will finish with an ok status if all <code class="docutils literal notranslate"><span class="pre">futures</span></code> finish with an ok status. Otherwise, it will be marked failed with the status of one of the failing futures.</p>
<p>Unlike AllComplete this <a class="reference internal" href="#classarrow_1_1_future"><span class="std std-ref">Future</span></a> will not complete immediately when a failure occurs. It will wait until all futures have finished. </p>
</dd></dl>
</section>
</section>
</article>
<footer class="prev-next-footer">
<div class="prev-next-area">
<a class="left-prev"
href="utilities.html"
title="previous page">
<i class="fa-solid fa-angle-left"></i>
<div class="prev-next-info">
<p class="prev-next-subtitle">previous</p>
<p class="prev-next-title">Utilities</p>
</div>
</a>
<a class="right-next"
href="io.html"
title="next page">
<div class="prev-next-info">
<p class="prev-next-subtitle">next</p>
<p class="prev-next-title">Input / output</p>
</div>
<i class="fa-solid fa-angle-right"></i>
</a>
</div>
</footer>
</div>
<div class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
<div class="sidebar-secondary-item">
<div
id="pst-page-navigation-heading-2"
class="page-toc tocsection onthispage">
<i class="fa-solid fa-list"></i> On this page
</div>
<nav class="bd-toc-nav page-toc" aria-labelledby="pst-page-navigation-heading-2">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#futures">Futures</a></li>
</ul>
</nav></div>
<div class="sidebar-secondary-item">
<div class="tocsection editthispage">
<a href="https://github.com/apache/arrow/edit/main/docs/source/cpp/api/async.rst">
<i class="fa-solid fa-pencil"></i>
Edit on GitHub
</a>
</div>
</div>
</div></div>
</div>
<footer class="bd-footer-content">
</footer>
</main>
</div>
</div>
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script src="../../_static/scripts/bootstrap.js?digest=8d27b9dea8ad943066ae"></script>
<script src="../../_static/scripts/pydata-sphinx-theme.js?digest=8d27b9dea8ad943066ae"></script>
<footer class="bd-footer">
<div class="bd-footer__inner bd-page-width">
<div class="footer-items__start">
<div class="footer-item">
<p class="copyright">
© Copyright 2016-2024 Apache Software Foundation.
Apache Arrow, Arrow, Apache, the Apache feather logo, and the Apache Arrow project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.
<br/>
</p>
</div>
<div class="footer-item">
<p class="sphinx-version">
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 6.2.0.
<br/>
</p>
</div>
</div>
<div class="footer-items__end">
<div class="footer-item">
<p class="theme-version">
Built with the <a href="https://pydata-sphinx-theme.readthedocs.io/en/stable/index.html">PyData Sphinx Theme</a> 0.15.2.
</p></div>
</div>
</div>
</footer>
</body>
</html>