You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asyncband.apache.org by gi...@apache.org on 2026/09/03 13:04:11 UTC
(asyncband-site) branch site/homepage-staging updated: deploy: 2639b5337a83e6b90b6b39a3b437339ae5f7e818
This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a commit to branch site/homepage-staging
in repository https://gitbox.apache.org/repos/asf/asyncband-site.git
The following commit(s) were added to refs/heads/site/homepage-staging by this push:
new 543bfc6 deploy: 2639b5337a83e6b90b6b39a3b437339ae5f7e818
543bfc6 is described below
commit 543bfc6f194afd58ac62281dffbaa7b3d7e98751
Author: tisonkun <ti...@users.noreply.github.com>
AuthorDate: Thu Sep 3 13:04:05 2026 +0000
deploy: 2639b5337a83e6b90b6b39a3b437339ae5f7e818
---
404.html | 6 +--
.../{styles.d1ee356a.css => styles.cbeb83b2.css} | 2 +-
assets/js/1df93b7f.3cbd7a59.js | 1 -
assets/js/1df93b7f.daf7073d.js | 1 +
assets/js/1f391b9e.4cefc88e.js | 1 +
assets/js/1f391b9e.bcc4a0e0.js | 2 -
assets/js/common.a38e7724.js | 2 +
....LICENSE.txt => common.a38e7724.js.LICENSE.txt} | 0
assets/js/da5fc804.4e5e0978.js | 1 -
assets/js/da5fc804.a4024c6c.js | 1 +
assets/js/main.93094ceb.js | 2 +
...js.LICENSE.txt => main.93094ceb.js.LICENSE.txt} | 0
assets/js/main.e0e5a48a.js | 2 -
assets/js/runtime~main.1be1e800.js | 1 -
assets/js/runtime~main.6ab94c75.js | 1 +
downloads/index.html | 6 +--
index.html | 61 +++++++---------------
17 files changed, 35 insertions(+), 55 deletions(-)
diff --git a/404.html b/404.html
index 9ca0649..1cde8ac 100644
--- a/404.html
+++ b/404.html
@@ -3,9 +3,9 @@
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.10.2">
-<title data-rh="true">Page Not Found | Apache Asyncband</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" name="twitter:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" property="og:url" content="https://asyncband.apache.org/404.html/"><meta data-rh [...]
-<script src="/assets/js/runtime~main.1be1e800.js" defer="defer"></script>
-<script src="/assets/js/main.e0e5a48a.js" defer="defer"></script>
+<title data-rh="true">Page Not Found | Apache Asyncband</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" name="twitter:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" property="og:url" content="https://asyncband.apache.org/404.html/"><meta data-rh [...]
+<script src="/assets/js/runtime~main.6ab94c75.js" defer="defer"></script>
+<script src="/assets/js/main.93094ceb.js" defer="defer"></script>
</head>
<body>
<svg style="display: none;"><defs>
diff --git a/assets/css/styles.d1ee356a.css b/assets/css/styles.cbeb83b2.css
similarity index 92%
rename from assets/css/styles.d1ee356a.css
rename to assets/css/styles.cbeb83b2.css
index 61f0c54..e54bfd2 100644
--- a/assets/css/styles.d1ee356a.css
+++ b/assets/css/styles.cbeb83b2.css
@@ -1 +1 @@
-code,pre{background-color:#f6f7f8}.card,kbd{background-color:#fff}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}html,pre code,table tr{background-color:transparent}a code,pre,table td,table th{color:inherit}blockquote,ol,pre,ul{margin:0 0 1rem}.button--outline.button--active,.button--outlin [...]
\ No newline at end of file
+code,pre{background-color:#f6f7f8}.card,kbd{background-color:#fff}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}html,pre code,table tr{background-color:transparent}a code,pre,table td,table th{color:inherit}blockquote,ol,pre,ul{margin:0 0 1rem}.button--outline.button--active,.button--outlin [...]
\ No newline at end of file
diff --git a/assets/js/1df93b7f.3cbd7a59.js b/assets/js/1df93b7f.3cbd7a59.js
deleted file mode 100644
index 3e8cd9a..0000000
--- a/assets/js/1df93b7f.3cbd7a59.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkasyncband_site=self.webpackChunkasyncband_site||[]).push([[583],{2178(n,e,s){s.r(e),s.d(e,{default:()=>a});var r=s(9102),t=s(1987),c=s(7008);function i(n){const e={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.R)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(e.p,{children:"Asyncband is a focused collect [...]
\ No newline at end of file
diff --git a/assets/js/1df93b7f.daf7073d.js b/assets/js/1df93b7f.daf7073d.js
new file mode 100644
index 0000000..a3e9777
--- /dev/null
+++ b/assets/js/1df93b7f.daf7073d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkasyncband_site=self.webpackChunkasyncband_site||[]).push([[583],{2178(n,e,s){s.r(e),s.d(e,{default:()=>o});var r=s(4688),t=s(9102),c=s(1987),d=s(7008);function i(n){const e={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,d.R)(),...n.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(e.h2,{id:"overview",children:"Overview"}),"\n",(0,c.jsx)(e.p,{children:"Asyncband is a focus [...]
\ No newline at end of file
diff --git a/assets/js/1f391b9e.4cefc88e.js b/assets/js/1f391b9e.4cefc88e.js
new file mode 100644
index 0000000..18221cb
--- /dev/null
+++ b/assets/js/1f391b9e.4cefc88e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkasyncband_site=self.webpackChunkasyncband_site||[]).push([[61],{52(e,n,t){t.r(n),t.d(n,{default:()=>Y});var a=t(1763),i=t(3526),s=t(792),r=t(8931),l=t(9102),d=t(4688),c=t(6905),o=t(4026),u=["parentIndex"];function m(e){var n=e.map(function(e){return Object.assign({},e,{parentIndex:-1,children:[]})}),t=Array(7).fill(-1);n.forEach(function(e,n){var a=t.slice(2,e.level);e.parentIndex=Math.max.apply(Math,a),t[e.level]=n});var a=[];return n.forEach(function(e){v [...]
\ No newline at end of file
diff --git a/assets/js/1f391b9e.bcc4a0e0.js b/assets/js/1f391b9e.bcc4a0e0.js
deleted file mode 100644
index 9130bf4..0000000
--- a/assets/js/1f391b9e.bcc4a0e0.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see 1f391b9e.bcc4a0e0.js.LICENSE.txt */
-(self.webpackChunkasyncband_site=self.webpackChunkasyncband_site||[]).push([[61],{7399(e,n,t){"use strict";t.r(n),t.d(n,{default:()=>it});var r=t(1763),a=t(3526),s=t(792),i=t(8931),c=t(9102),o=t(7008),l=t(9633),u=t(6905),d=t(7050),m=t(9193),f=t(4026);function h(){var e=(0,f.p)().prism,n=(0,m.G)().colorMode,t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var v=t(4588),p=t(4809),g=t.n(p),j=t(1329),b=t(1987),x=(0,v.A)(/title=(["'])(.*?)\1/,{quote:1,title:2}),N=(0,v.A)(/\{([\d,-]+)\}/,{range [...]
\ No newline at end of file
diff --git a/assets/js/common.a38e7724.js b/assets/js/common.a38e7724.js
new file mode 100644
index 0000000..6f1152f
--- /dev/null
+++ b/assets/js/common.a38e7724.js
@@ -0,0 +1,2 @@
+/*! For license information please see common.a38e7724.js.LICENSE.txt */
+(self.webpackChunkasyncband_site=self.webpackChunkasyncband_site||[]).push([[76],{5930(e,n,t){"use strict";t.d(n,{A:()=>M});var r=t(1763),a=t(1987);function s(e){var n,t=function(e){var n=r.Children.toArray(e),t=n.find(function(e){return r.isValidElement(e)&&"mdxAdmonitionTitle"===e.type}),s=n.filter(function(e){return e!==t});return{mdxAdmonitionTitle:null==t?void 0:t.props.children,rest:s.length>0?(0,a.jsx)(a.Fragment,{children:s}):null}}(e.children),s=t.mdxAdmonitionTitle,i=t.rest,c=n [...]
\ No newline at end of file
diff --git a/assets/js/1f391b9e.bcc4a0e0.js.LICENSE.txt b/assets/js/common.a38e7724.js.LICENSE.txt
similarity index 100%
rename from assets/js/1f391b9e.bcc4a0e0.js.LICENSE.txt
rename to assets/js/common.a38e7724.js.LICENSE.txt
diff --git a/assets/js/da5fc804.4e5e0978.js b/assets/js/da5fc804.4e5e0978.js
deleted file mode 100644
index 08da597..0000000
--- a/assets/js/da5fc804.4e5e0978.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkasyncband_site=self.webpackChunkasyncband_site||[]).push([[822],{6199(e,n,t){t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"type":"mdx","permalink":"/downloads","source":"@site/src/pages/downloads.md","title":"Downloads","description":"Apache Asyncband release downloads.","frontMatter":{"title":"Downloads","description":"Apache Asyncband release downloads."},"unlisted":false}'); [...]
\ No newline at end of file
diff --git a/assets/js/da5fc804.a4024c6c.js b/assets/js/da5fc804.a4024c6c.js
new file mode 100644
index 0000000..dbbbbda
--- /dev/null
+++ b/assets/js/da5fc804.a4024c6c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkasyncband_site=self.webpackChunkasyncband_site||[]).push([[822],{6199(e,s,n){n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"type":"mdx","permalink":"/downloads","source":"@site/src/pages/downloads.md","title":"Downloads","description":"Apache Asyncband release downloads.","frontMatter":{"title":"Downloads","description":"Apache Asyncband release downloads."},"unlisted":false}'); [...]
\ No newline at end of file
diff --git a/assets/js/main.93094ceb.js b/assets/js/main.93094ceb.js
new file mode 100644
index 0000000..6c76a35
--- /dev/null
+++ b/assets/js/main.93094ceb.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.93094ceb.js.LICENSE.txt */
+(self.webpackChunkasyncband_site=self.webpackChunkasyncband_site||[]).push([[792],{7552(e,t,n){const r={"./prism-bash":1022,"./prism-rust":2398,"./prism-toml":100};function a(e){const t=o(e);return n(t)}function o(e){if(!n.o(r,e)){const t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=7552},6977(e,t,n){"use strict";n.d(t,{mg:()=>J,vd:()=>W});var r=n.cw(function(e,t){e.exports=func [...]
\ No newline at end of file
diff --git a/assets/js/main.e0e5a48a.js.LICENSE.txt b/assets/js/main.93094ceb.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.e0e5a48a.js.LICENSE.txt
rename to assets/js/main.93094ceb.js.LICENSE.txt
diff --git a/assets/js/main.e0e5a48a.js b/assets/js/main.e0e5a48a.js
deleted file mode 100644
index fc704c4..0000000
--- a/assets/js/main.e0e5a48a.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.e0e5a48a.js.LICENSE.txt */
-(self.webpackChunkasyncband_site=self.webpackChunkasyncband_site||[]).push([[792],{7552(e,t,n){const r={"./prism-bash":1022,"./prism-rust":2398,"./prism-toml":100};function a(e){const t=o(e);return n(t)}function o(e){if(!n.o(r,e)){const t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=7552},6977(e,t,n){"use strict";n.d(t,{mg:()=>J,vd:()=>W});var r=n.cw(function(e,t){e.exports=func [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.1be1e800.js b/assets/js/runtime~main.1be1e800.js
deleted file mode 100644
index d259f24..0000000
--- a/assets/js/runtime~main.1be1e800.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e={};const t={};function r(n){const o=t[n];if(void 0!==o)return o.exports;const i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}r.m=e,(()=>{const e=[];r.O=(t,n,o,i)=>{if(n){i=i||0;for(var s=e.length;s>0&&e[s-1][2]>i;s--)e[s]=e[s-1];return void(e[s]=[n,o,i])}let a=1/0;for(s=0;s<e.length;s++){let[n,o,i]=e[s],l=!0;for(var c=0;c<n.length;c++)1&i&&!(a>=i)||!Object.keys(r.O).every(e=>r.O[e](n[c]))?(l=!1,i<a&&(a=i)):n.splice(c--,1);if(l){e.splice(s [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.6ab94c75.js b/assets/js/runtime~main.6ab94c75.js
new file mode 100644
index 0000000..393b2bd
--- /dev/null
+++ b/assets/js/runtime~main.6ab94c75.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e={};const t={};function r(n){const o=t[n];if(void 0!==o)return o.exports;const a=t[n]={exports:{}};return e[n].call(a.exports,a,a.exports,r),a.exports}r.m=e,(()=>{const e=[];r.O=(t,n,o,a)=>{if(n){a=a||0;for(var c=e.length;c>0&&e[c-1][2]>a;c--)e[c]=e[c-1];return void(e[c]=[n,o,a])}let i=1/0;for(c=0;c<e.length;c++){let[n,o,a]=e[c],l=!0;for(var s=0;s<n.length;s++)1&a&&!(i>=a)||!Object.keys(r.O).every(e=>r.O[e](n[s]))?(l=!1,a<i&&(i=a)):n.splice(s--,1);if(l){e.splice(c [...]
\ No newline at end of file
diff --git a/downloads/index.html b/downloads/index.html
index 6b4a48a..155cb70 100644
--- a/downloads/index.html
+++ b/downloads/index.html
@@ -3,9 +3,9 @@
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.10.2">
-<title data-rh="true">Downloads | Apache Asyncband</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" name="twitter:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" property="og:url" content="https://asyncband.apache.org/downloads/"><meta data-rh="tr [...]
-<script src="/assets/js/runtime~main.1be1e800.js" defer="defer"></script>
-<script src="/assets/js/main.e0e5a48a.js" defer="defer"></script>
+<title data-rh="true">Downloads | Apache Asyncband</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" name="twitter:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" property="og:url" content="https://asyncband.apache.org/downloads/"><meta data-rh="tr [...]
+<script src="/assets/js/runtime~main.6ab94c75.js" defer="defer"></script>
+<script src="/assets/js/main.93094ceb.js" defer="defer"></script>
</head>
<body>
<svg style="display: none;"><defs>
diff --git a/index.html b/index.html
index 6bcb99c..a3bb69a 100644
--- a/index.html
+++ b/index.html
@@ -3,34 +3,26 @@
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.10.2">
-<title data-rh="true">Apache Asyncband</title><meta data-rh="true" property="og:title" content="Apache Asyncband"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" name="twitter:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" property="og:url" content="ht [...]
-<script src="/assets/js/runtime~main.1be1e800.js" defer="defer"></script>
-<script src="/assets/js/main.e0e5a48a.js" defer="defer"></script>
+<title data-rh="true">Apache Asyncband</title><meta data-rh="true" property="og:title" content="Apache Asyncband"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" name="twitter:image" content="https://asyncband.apache.org/og.png"><meta data-rh="true" property="og:url" content="ht [...]
+<script src="/assets/js/runtime~main.6ab94c75.js" defer="defer"></script>
+<script src="/assets/js/main.93094ceb.js" defer="defer"></script>
</head>
<body>
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/asf-logo.svg"><div role="region" aria-label="Skip to ma [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/asf-logo.svg"><div role="region" aria-label="Skip to ma [...]
<p>Asyncband is a focused collection of composable, runtime-agnostic concurrency building blocks for async Rust. It provides synchronization, initialization, task coordination, channels, resource reuse, and workload control without choosing an executor for the application.</p>
<p>Asyncband's async APIs are built on standard futures and wakers. The library does not spawn tasks, own worker threads, install timers, or require a reactor or I/O driver. Applications can poll its futures with Tokio, async-std, smol, a custom executor, or any other standards-based runtime, and compose runtime services such as deadlines around them.</p>
-<h3 id="project-scope">Project scope</h3>
+<h3 class="anchor anchorTargetStickyNavbar_zq6S" id="project-scope">Project scope<a href="#project-scope" class="hash-link" aria-label="Direct link to Project scope" title="Direct link to Project scope" translate="no"></a></h3>
<p>The project is not limited to small or stateless synchronization primitives. Stateful utilities such as a singleflight group or an object pool fit when they provide a generally reusable coordination mechanism and remain independent of executor policy.</p>
<p>The boundary is mechanism versus policy. Task placement, timers, deadlines, retries, periodic maintenance, and application lifecycle orchestration stay with the caller and its runtime. Potential future-concurrency or scheduling APIs are evaluated against the same boundary: they must remain executor-independent and compose with caller-owned execution and timing.</p>
-<h2 id="getting-started">Getting started</h2>
+<h2 class="anchor anchorTargetStickyNavbar_zq6S" id="getting-started">Getting started<a href="#getting-started" class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started" translate="no"></a></h2>
<p>The crate enables no APIs by default. Enable only the features your application uses:</p>
-<pre><code class="language-shell">cargo add asyncband --features mutex
-</code></pre>
-<pre><code class="language-rust">use asyncband::mutex::Mutex;
-
-async fn increment() {
- let counter = Mutex::new(0);
- *counter.lock().await += 1;
- assert_eq!(*counter.lock().await, 1);
-}
-</code></pre>
+<div class="language-shell codeBlockContainer_lkHg theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_KnrP"><pre tabindex="0" class="prism-code language-shell codeBlock_FDzL thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_pYqn"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">cargo</span><span class="token plain"> </span><span class="token [...]
+<div class="language-rust codeBlockContainer_lkHg theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_KnrP"><pre tabindex="0" class="prism-code language-rust codeBlock_FDzL thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_pYqn"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">use</span><span class="token plain"> </span><span class="token names [...]
<p>Public paths stay direct—such as <code>asyncband::mutex</code>, <code>asyncband::pool</code>, and <code>asyncband::once::OnceCell</code>—while Cargo features keep unused implementations out of the build.</p>
-<h2 id="api-map">API map</h2>
+<h2 class="anchor anchorTargetStickyNavbar_zq6S" id="api-map">API map<a href="#api-map" class="hash-link" aria-label="Direct link to API map" title="Direct link to API map" translate="no"></a></h2>
@@ -150,36 +142,23 @@ async fn increment() {
-<table><thead><tr><th>Area</th><th>API</th><th>Feature</th><th>Use</th></tr></thead><tbody><tr><td>Shared state</td><td><a href="https://docs.rs/asyncband/*/asyncband/mutex/struct.Mutex.html"><code>Mutex</code></a></td><td><code>mutex</code></td><td>Protect shared data with asynchronous mutual exclusion.</td></tr><tr><td></td><td><a href="https://docs.rs/asyncband/*/asyncband/rwlock/struct.RwLock.html"><code>RwLock</code></a></td><td><code>rwlock</code></td><td>Allow multiple readers or [...]
-<h2 id="synchronous-interoperability">Synchronous interoperability</h2>
+<table><thead><tr><th>Area</th><th>API</th><th>Feature</th><th>Use</th></tr></thead><tbody><tr><td>Shared state</td><td><a href="https://docs.rs/asyncband/*/asyncband/mutex/struct.Mutex.html" target="_blank" rel="noopener noreferrer" class=""><code>Mutex</code></a></td><td><code>mutex</code></td><td>Protect shared data with asynchronous mutual exclusion.</td></tr><tr><td></td><td><a href="https://docs.rs/asyncband/*/asyncband/rwlock/struct.RwLock.html" target="_blank" rel="noopener noref [...]
+<h2 class="anchor anchorTargetStickyNavbar_zq6S" id="synchronous-interoperability">Synchronous interoperability<a href="#synchronous-interoperability" class="hash-link" aria-label="Direct link to Synchronous interoperability" title="Direct link to Synchronous interoperability" translate="no"></a></h2>
<p>The optional <code>blocking</code> module is a boundary adapter for synchronous callers. It parks the calling thread while driving one future; it is not a general-purpose executor.</p>
-<pre><code class="language-shell">cargo add asyncband --features blocking,oneshot
-</code></pre>
-<pre><code class="language-rust">use std::thread;
-
-use asyncband::blocking::FutureExt as _;
-use asyncband::oneshot;
-
-let (sender, receiver) = oneshot::channel();
-thread::spawn(move || {
- let result = 6 * 7;
- sender.send(result).unwrap();
-});
-
-assert_eq!(receiver.block_on(), Ok(42));
-</code></pre>
-<h3 id="async-first-blocking-by-adaptation">Async first, blocking by adaptation</h3>
+<div class="language-shell codeBlockContainer_lkHg theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_KnrP"><pre tabindex="0" class="prism-code language-shell codeBlock_FDzL thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_pYqn"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">cargo</span><span class="token plain"> </span><span class="token [...]
+<div class="language-rust codeBlockContainer_lkHg theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_KnrP"><pre tabindex="0" class="prism-code language-rust codeBlock_FDzL thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_pYqn"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">use</span><span class="token plain"> </span><span class="token names [...]
+<h3 class="anchor anchorTargetStickyNavbar_zq6S" id="async-first-blocking-by-adaptation">Async first, blocking by adaptation<a href="#async-first-blocking-by-adaptation" class="hash-link" aria-label="Direct link to Async first, blocking by adaptation" title="Direct link to Async first, blocking by adaptation" translate="no"></a></h3>
<p>Async and synchronous synchronization primitives have different optimization constraints. Once an async operation is exposed as a runtime-agnostic future, synchronous code can usually drive that future through a <code>block_on</code> adapter. Asyncband therefore designs its primitives for async use and provides blocking interoperability at the boundary instead of duplicating synchronous methods across every type.</p>
<p>A sync-first implementation can exploit OS- or platform-specific facilities that an async implementation cannot assume. Libraries focused on synchronous code can therefore make different and sometimes better tradeoffs. Asyncband leaves those optimizations to dedicated libraries rather than treating blocking adaptation as a second family of primitives.</p>
-<h3 id="execution-constraints">Execution constraints</h3>
-<p>The <code>blocking</code> module is a lightweight, thread-parking single-future executor, not a general-purpose async runtime. <code>wait_timeout</code> drops the future on timeout. Futures that depend on a runtime-specific timer or I/O driver still need that runtime's driver to make progress, and blocking an executor thread can cause starvation or deadlocks. See the <a href="https://docs.rs/asyncband/*/asyncband/blocking/"><code>blocking</code> module documentation</a> for the f [...]
-<h2 id="thread-safety">Thread safety</h2>
+<h3 class="anchor anchorTargetStickyNavbar_zq6S" id="execution-constraints">Execution constraints<a href="#execution-constraints" class="hash-link" aria-label="Direct link to Execution constraints" title="Direct link to Execution constraints" translate="no"></a></h3>
+<p>The <code>blocking</code> module is a lightweight, thread-parking single-future executor, not a general-purpose async runtime. <code>wait_timeout</code> drops the future on timeout. Futures that depend on a runtime-specific timer or I/O driver still need that runtime's driver to make progress, and blocking an executor thread can cause starvation or deadlocks. See the <a href="https://docs.rs/asyncband/*/asyncband/blocking/" target="_blank" rel="noopener noreferrer" class=""><code [...]
+<h2 class="anchor anchorTargetStickyNavbar_zq6S" id="thread-safety">Thread safety<a href="#thread-safety" class="hash-link" aria-label="Direct link to Thread safety" title="Direct link to Thread safety" translate="no"></a></h2>
<p>Asyncband types implement <code>Send</code> and <code>Sync</code> only when the protected, transferred, or managed value satisfies the necessary bounds. See each API's documentation for its exact contract.</p>
-<h2 id="minimum-supported-rust-version-msrv">Minimum Supported Rust Version (MSRV)</h2>
+<h2 class="anchor anchorTargetStickyNavbar_zq6S" id="minimum-supported-rust-version-msrv">Minimum Supported Rust Version (MSRV)<a href="#minimum-supported-rust-version-msrv" class="hash-link" aria-label="Direct link to Minimum Supported Rust Version (MSRV)" title="Direct link to Minimum Supported Rust Version (MSRV)" translate="no"></a></h2>
<p>This crate is built against the latest stable release, and its minimum supported rustc version is 1.86.0.</p>
<p>The policy is that the minimum Rust version required to use this crate can be increased in minor version updates. For example, if Asyncband 1.0 requires Rust 1.20.0, then Asyncband 1.0.z for all values of z will also require Rust 1.20.0 or newer. However, Asyncband 1.y for y > 0 may require a newer minimum version.</p>
-<h2 id="license-and-trademarks">License and Trademarks</h2>
-<p>This project is licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_zq6S" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks" translate="no"></a></h2>
+<p>This project is licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0" target="_blank" rel="noopener noreferrer" class="">Apache License, Version 2.0</a>.</p>
<p>Apache Asyncband, Asyncband, and Apache are either registered trademarks or trademarks of The Apache Software Foundation in the United States and/or other countries.</p></article></main></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a clas [...]
</body>
</html>
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@asyncband.apache.org
For additional commands, e-mail: commits-help@asyncband.apache.org