async 2.12.1 → 2.21.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/kernel/async.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2022, by Samuel Williams.
4
+ # Copyright, 2019-2024, by Samuel Williams.
5
5
 
6
6
  require_relative "../async/reactor"
7
7
 
@@ -19,11 +19,13 @@ module Kernel
19
19
  # @yields {|task| ...} The block that will execute asynchronously.
20
20
  # @parameter task [Async::Task] The task that is executing the given block.
21
21
  #
22
- # @public Since `stable-v1`.
22
+ # @public Since *Async v1*.
23
23
  # @asynchronous May block until given block completes executing.
24
24
  def Async(...)
25
25
  if current = ::Async::Task.current?
26
26
  return current.async(...)
27
+ elsif scheduler = Fiber.scheduler
28
+ ::Async::Task.run(scheduler, ...)
27
29
  else
28
30
  # This calls Fiber.set_scheduler(self):
29
31
  reactor = ::Async::Reactor.new
data/lib/kernel/sync.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2022, by Samuel Williams.
4
+ # Copyright, 2019-2024, by Samuel Williams.
5
5
  # Copyright, 2020, by Brian Morearty.
6
+ # Copyright, 2024, by Patrik Wenger.
6
7
 
7
8
  require_relative "../async/reactor"
8
9
 
@@ -13,17 +14,23 @@ module Kernel
13
14
  # @yields {|task| ...} The block that will execute asynchronously.
14
15
  # @parameter task [Async::Task] The task that is executing the given block.
15
16
  #
16
- # @public Since `stable-v1`.
17
+ # @public Since *Async v1*.
17
18
  # @asynchronous Will block until given block completes executing.
18
- def Sync(&block)
19
+ def Sync(annotation: nil, &block)
19
20
  if task = ::Async::Task.current?
20
- yield task
21
+ if annotation
22
+ task.annotate(annotation) {yield task}
23
+ else
24
+ yield task
25
+ end
26
+ elsif scheduler = Fiber.scheduler
27
+ ::Async::Task.run(scheduler, &block).wait
21
28
  else
22
29
  # This calls Fiber.set_scheduler(self):
23
30
  reactor = Async::Reactor.new
24
31
 
25
32
  begin
26
- return reactor.run(finished: ::Async::Condition.new, &block).wait
33
+ return reactor.run(annotation: annotation, finished: ::Async::Condition.new, &block).wait
27
34
  ensure
28
35
  Fiber.set_scheduler(nil)
29
36
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2024, by Samuel Williams.
5
+
6
+ require_relative "../../../async/task"
7
+ require "metrics/provider"
8
+
9
+ Metrics::Provider(Async::Task) do
10
+ ASYNC_TASK_SCHEDULED = Metrics.metric("async.task.scheduled", :counter, description: "The number of tasks scheduled.")
11
+
12
+ def schedule(&block)
13
+ ASYNC_TASK_SCHEDULED.emit(1)
14
+
15
+ super(&block)
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2024, by Samuel Williams.
5
+
6
+ require_relative "async/task"
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2022, by Samuel Williams.
5
+
6
+ require_relative "../../../async/barrier"
7
+ require "traces/provider"
8
+
9
+ Traces::Provider(Async::Barrier) do
10
+ def wait
11
+ attributes = {
12
+ "size" => self.size
13
+ }
14
+
15
+ Traces.trace("async.barrier.wait", attributes: attributes) {super}
16
+ end
17
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2022, by Samuel Williams.
5
+
6
+ require_relative "../../../async/task"
7
+ require "traces/provider"
8
+
9
+ Traces::Provider(Async::Task) do
10
+ def schedule(&block)
11
+ # If we are not actively tracing anything, then we can skip this:
12
+ unless Traces.active?
13
+ return super(&block)
14
+ end
15
+
16
+ unless self.transient?
17
+ trace_context = Traces.trace_context
18
+ end
19
+
20
+ attributes = {
21
+ # We use the instance variable as it corresponds to the user-provided block.
22
+ "block" => @block,
23
+ "transient" => self.transient?,
24
+ }
25
+
26
+ # Run the trace in the context of the child task:
27
+ super do
28
+ Traces.trace_context = trace_context
29
+
30
+ if annotation = self.annotation
31
+ attributes["annotation"] = annotation
32
+ end
33
+
34
+ Traces.trace("async.task", attributes: attributes) do
35
+ # Yes, this is correct, we already called super above:
36
+ yield
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2024, by Samuel Williams.
5
+
6
+ require_relative "async/task"
7
+ require_relative "async/barrier"
data/license.md CHANGED
@@ -11,7 +11,7 @@ Copyright, 2020-2023, by Olle Jonsson.
11
11
  Copyright, 2020, by Salim Semaoune.
12
12
  Copyright, 2020, by Brian Morearty.
13
13
  Copyright, 2020, by Stefan Wrobel.
14
- Copyright, 2020, by Patrik Wenger.
14
+ Copyright, 2020-2024, by Patrik Wenger.
15
15
  Copyright, 2020, by Ken Muryoi.
16
16
  Copyright, 2020, by Jun Jiang.
17
17
  Copyright, 2020-2022, by Bruno Sutic.
@@ -26,6 +26,7 @@ Copyright, 2023, by Math Ieu.
26
26
  Copyright, 2023, by Emil Tin.
27
27
  Copyright, 2023, by Gert Goet.
28
28
  Copyright, 2024, by Dimitar Peychinov.
29
+ Copyright, 2024, by Jamie McCarthy.
29
30
 
30
31
  Permission is hereby granted, free of charge, to any person obtaining a copy
31
32
  of this software and associated documentation files (the "Software"), to deal
data/readme.md CHANGED
@@ -1,4 +1,4 @@
1
- # ![Async](logo.svg)
1
+ # ![Async](assets/logo.webp)
2
2
 
3
3
  Async is a composable asynchronous I/O framework for Ruby based on [io-event](https://github.com/socketry/io-event).
4
4
 
@@ -7,6 +7,7 @@ Async is a composable asynchronous I/O framework for Ruby based on [io-event](ht
7
7
  > beautifully designed." *– [janko](https://github.com/janko)*
8
8
 
9
9
  [![Development Status](https://github.com/socketry/async/workflows/Test/badge.svg)](https://github.com/socketry/async/actions?workflow=Test)
10
+ [<img src="https://api.gitsponsors.com/api/badge/img?id=87380483" height="20"/>](https://api.gitsponsors.com/api/badge/link?p=U4gCxvzG7eUksiJSe0MSlPHWWhBYryqj6i48tx5L7/r/2NgkAToKb6dEm31bAftU3H+7BVwk3VhUBtE4GHqHJTPfWPR6xo2BQVoT15rFAGAsLFgdT2kKopIfCGV/QDOm7BrkodS2//R7NUMksAdaCQ==)
10
11
 
11
12
  ## Features
12
13
 
@@ -19,51 +20,70 @@ Async is a composable asynchronous I/O framework for Ruby based on [io-event](ht
19
20
 
20
21
  Please see the [project documentation](https://socketry.github.io/async/) for more details.
21
22
 
22
- - [Getting Started](https://socketry.github.io/async/guides/getting-started/index) - This guide shows how to add
23
- async to your project and run code asynchronously.
23
+ - [Getting Started](https://socketry.github.io/async/guides/getting-started/index) - This guide shows how to add async to your project and run code asynchronously.
24
24
 
25
- - [Asynchronous Tasks](https://socketry.github.io/async/guides/asynchronous-tasks/index) - This guide explains how
26
- asynchronous tasks work and how to use them.
25
+ - [Asynchronous Tasks](https://socketry.github.io/async/guides/asynchronous-tasks/index) - This guide explains how asynchronous tasks work and how to use them.
27
26
 
28
- - [Event Loop](https://socketry.github.io/async/guides/event-loop/index) - This guide gives an overview of how the
29
- event loop is implemented.
27
+ - [Event Loop](https://socketry.github.io/async/guides/event-loop/index) - This guide gives an overview of how the event loop is implemented.
30
28
 
31
- - [Compatibility](https://socketry.github.io/async/guides/compatibility/index) - This guide gives an overview of the
32
- compatibility of Async with Ruby and other frameworks.
29
+ - [Compatibility](https://socketry.github.io/async/guides/compatibility/index) - This guide gives an overview of the compatibility of Async with Ruby and other frameworks.
33
30
 
34
- - [Best Practices](https://socketry.github.io/async/guides/best-practices/index) - This guide gives an overview of
35
- best practices for using Async.
31
+ - [Best Practices](https://socketry.github.io/async/guides/best-practices/index) - This guide gives an overview of best practices for using Async.
36
32
 
37
- ## Contributing
33
+ - [Debugging](https://socketry.github.io/async/guides/debugging/index) - This guide explains how to debug issues with programs that use Async.
38
34
 
39
- We welcome contributions to this project.
35
+ ## Releases
40
36
 
41
- 1. Fork it.
42
- 2. Create your feature branch (`git checkout -b my-new-feature`).
43
- 3. Commit your changes (`git commit -am 'Add some feature'`).
44
- 4. Push to the branch (`git push origin my-new-feature`).
45
- 5. Create new Pull Request.
37
+ Please see the [project releases](https://socketry.github.io/async/releases/index) for all releases.
46
38
 
47
- ### Developer Certificate of Origin
39
+ ### v2.21.1
40
+
41
+ - [Worker Pool](https://socketry.github.io/async/releases/index#worker-pool)
48
42
 
49
- This project uses the [Developer Certificate of Origin](https://developercertificate.org/). All contributors to this project must agree to this document to have their contributions accepted.
43
+ ### v2.20.0
50
44
 
51
- ### Contributor Covenant
45
+ - [Traces and Metrics Providers](https://socketry.github.io/async/releases/index#traces-and-metrics-providers)
52
46
 
53
- This project is governed by the [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
47
+ ### v2.19.0
48
+
49
+ - [Async::Scheduler Debugging](https://socketry.github.io/async/releases/index#async::scheduler-debugging)
50
+ - [Console Shims](https://socketry.github.io/async/releases/index#console-shims)
51
+
52
+ ### v2.18.0
53
+
54
+ - Add support for `Sync(annotation:)`, so that you can annotate the block with a description of what it does, even if it doesn't create a new task.
55
+
56
+ ### v2.17.0
57
+
58
+ - Introduce `Async::Queue#push` and `Async::Queue#pop` for compatibility with `::Queue`.
59
+
60
+ ### v2.16.0
61
+
62
+ - [Better Handling of Async and Sync in Nested Fibers](https://socketry.github.io/async/releases/index#better-handling-of-async-and-sync-in-nested-fibers)
54
63
 
55
64
  ## See Also
56
65
 
57
- - [async-io](https://github.com/socketry/async-io) — Asynchronous networking and sockets.
58
66
  - [async-http](https://github.com/socketry/async-http) — Asynchronous HTTP client/server.
59
- - [async-process](https://github.com/socketry/async-process) — Asynchronous process spawning/waiting.
60
67
  - [async-websocket](https://github.com/socketry/async-websocket) — Asynchronous client and server websockets.
61
68
  - [async-dns](https://github.com/socketry/async-dns) — Asynchronous DNS resolver and server.
62
- - [async-rspec](https://github.com/socketry/async-rspec) — Shared contexts for running async specs.
63
-
64
- ### Projects Using Async
65
-
66
- - [ciri](https://github.com/ciri-ethereum/ciri) — An Ethereum implementation written in Ruby.
67
69
  - [falcon](https://github.com/socketry/falcon) — A rack compatible server built on top of `async-http`.
68
70
  - [rubydns](https://github.com/ioquatix/rubydns) — An easy to use Ruby DNS server.
69
71
  - [slack-ruby-bot](https://github.com/slack-ruby/slack-ruby-bot) — A client for making slack bots.
72
+
73
+ ## Contributing
74
+
75
+ We welcome contributions to this project.
76
+
77
+ 1. Fork it.
78
+ 2. Create your feature branch (`git checkout -b my-new-feature`).
79
+ 3. Commit your changes (`git commit -am 'Add some feature'`).
80
+ 4. Push to the branch (`git push origin my-new-feature`).
81
+ 5. Create new Pull Request.
82
+
83
+ ### Developer Certificate of Origin
84
+
85
+ In order to protect users of this project, we require all contributors to comply with the [Developer Certificate of Origin](https://developercertificate.org/). This ensures that all contributions are properly licensed and attributed.
86
+
87
+ ### Community Guidelines
88
+
89
+ This project is best served by a collaborative and respectful environment. Treat each other professionally, respect differing viewpoints, and engage constructively. Harassment, discrimination, or harmful behavior is not tolerated. Communicate clearly, listen actively, and support one another. If any issues arise, please inform the project maintainers.
data/releases.md ADDED
@@ -0,0 +1,97 @@
1
+ # Releases
2
+
3
+ ## v2.21.1
4
+
5
+ ### Worker Pool
6
+
7
+ Ruby 3.4 will feature a new fiber scheduler hook, `blocking_operation_wait` which allows the scheduler to redirect the work given to `rb_nogvl` to a worker pool.
8
+
9
+ The Async scheduler optionally supports this feature using a worker pool, by using the following environment variable:
10
+
11
+ ASYNC_SCHEDULER_DEFAULT_WORKER_POOL=true
12
+
13
+ This will cause the scheduler to use a worker pool for general blocking operations, rather than blocking the event loop.
14
+
15
+ It should be noted that this isn't a net win, as the overhead of using a worker pool can be significant compared to the `rb_nogvl` work. As such, it is recommended to benchmark your application with and without the worker pool to determine if it is beneficial.
16
+
17
+ ## v2.20.0
18
+
19
+ ### Traces and Metrics Providers
20
+
21
+ Async now has [traces](https://github.com/socketry/traces) and [metrics](https://github.com/socketry/metrics) providers for various core classes. This allows you to emit traces and metrics to a suitable backend (including DataDog, New Relic, OpenTelemetry, etc.) for monitoring and debugging purposes.
22
+
23
+ To take advantage of this feature, you will need to introduce your own `config/traces.rb` and `config/metrics.rb`. Async's own repository includes these files for testing purposes, you could copy them into your own project and modify them as needed.
24
+
25
+ ## v2.19.0
26
+
27
+ ### Async::Scheduler Debugging
28
+
29
+ Occasionally on issues, I encounter people asking for help and I need more information. Pressing Ctrl-C to exit a hung program is common, but it usually doesn't provide enough information to diagnose the problem. Setting the `CONSOLE_LEVEL=debug` environment variable will now print additional information about the scheduler when you interrupt it, including a backtrace of the current tasks.
30
+
31
+ > CONSOLE_LEVEL=debug bundle exec ruby ./test.rb
32
+ ^C 0.0s debug: Async::Reactor [oid=0x974] [ec=0x988] [pid=9116] [2024-11-08 14:12:03 +1300]
33
+ | Scheduler interrupted: Interrupt
34
+ | #<Async::Reactor:0x0000000000000974 1 children (running)>
35
+ | #<Async::Task:0x000000000000099c /Users/samuel/Developer/socketry/async/lib/async/scheduler.rb:185:in `transfer' (running)>
36
+ | → /Users/samuel/Developer/socketry/async/lib/async/scheduler.rb:185:in `transfer'
37
+ | /Users/samuel/Developer/socketry/async/lib/async/scheduler.rb:185:in `block'
38
+ | /Users/samuel/Developer/socketry/async/lib/async/scheduler.rb:207:in `kernel_sleep'
39
+ | /Users/samuel/Developer/socketry/async/test.rb:7:in `sleep'
40
+ | /Users/samuel/Developer/socketry/async/test.rb:7:in `sleepy'
41
+ | /Users/samuel/Developer/socketry/async/test.rb:12:in `block in <top (required)>'
42
+ | /Users/samuel/Developer/socketry/async/lib/async/task.rb:197:in `block in run'
43
+ | /Users/samuel/Developer/socketry/async/lib/async/task.rb:420:in `block in schedule'
44
+ /Users/samuel/Developer/socketry/async/lib/async/scheduler.rb:317:in `select': Interrupt
45
+ ... (backtrace continues) ...
46
+
47
+ This gives better visibility into what the scheduler is doing, and should help diagnose issues.
48
+
49
+ ### Console Shims
50
+
51
+ The `async` gem depends on `console` gem, because my goal was to have good logging by default without thinking about it too much. However, some users prefer to avoid using the `console` gem for logging, so I've added an experimental set of shims which should allow you to bypass the `console` gem entirely.
52
+
53
+ ``` ruby
54
+ require 'async/console'
55
+ require 'async'
56
+
57
+ Async{raise "Boom"}
58
+ ```
59
+
60
+ Will now use `Kernel#warn` to print the task failure warning:
61
+
62
+ #<Async::Task:0x00000000000012d4 /home/samuel/Developer/socketry/async/lib/async/task.rb:104:in `backtrace' (running)>
63
+ Task may have ended with unhandled exception.
64
+ (irb):4:in `block in <top (required)>': Boom (RuntimeError)
65
+ from /home/samuel/Developer/socketry/async/lib/async/task.rb:197:in `block in run'
66
+ from /home/samuel/Developer/socketry/async/lib/async/task.rb:420:in `block in schedule'
67
+
68
+ ## v2.18.0
69
+
70
+ - Add support for `Sync(annotation:)`, so that you can annotate the block with a description of what it does, even if it doesn't create a new task.
71
+
72
+ ## v2.17.0
73
+
74
+ - Introduce `Async::Queue#push` and `Async::Queue#pop` for compatibility with `::Queue`.
75
+
76
+ ## v2.16.0
77
+
78
+ ### Better Handling of Async and Sync in Nested Fibers
79
+
80
+ Interleaving bare fibers within `Async` and `Sync` blocks should not cause problems, but it presents a number of issues in the current implementation. Tracking the parent-child relationship between tasks, when they are interleaved with bare fibers, is difficult. The current implementation assumes that if there is no parent task, then it should create a new reactor. This is not always the case, as the parent task might not be visible due to nested Fibers. As a result, `Async` will create a new reactor, trying to stop the existing one, causing major internal consistency issues.
81
+
82
+ I encountered this issue when trying to use `Async` within a streaming response in Rails. The `protocol-rack` [uses a normal fiber to wrap streaming responses](https://github.com/socketry/protocol-rack/blob/cb1ca44e9deadb9369bdb2ea03416556aa927c5c/lib/protocol/rack/body/streaming.rb#L24-L28), and if you try to use `Async` within it, it will create a new reactor, causing the server to lock up.
83
+
84
+ Ideally, `Async` and `Sync` helpers should work when any `Fiber.scheduler` is defined. Right now, it's unrealistic to expect `Async::Task` to work in any scheduler, but at the very least, the following should work:
85
+
86
+ ``` ruby
87
+ reactor = Async::Reactor.new # internally calls Fiber.set_scheduler
88
+
89
+ # This should run in the above reactor, rather than creating a new one.
90
+ Async do
91
+ puts "Hello World"
92
+ end
93
+ ```
94
+
95
+ In order to do this, bare `Async` and `Sync` blocks should use `Fiber.scheduler` as a parent if possible.
96
+
97
+ See <https://github.com/socketry/async/pull/340> for more details.
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,15 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.12.1
4
+ version: 2.21.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  - Bruno Sutic
9
9
  - Jeremy Jung
10
10
  - Olle Jonsson
11
+ - Patrik Wenger
11
12
  - Devin Christensen
12
13
  - Emil Tin
14
+ - Jamie McCarthy
13
15
  - Kent Gruber
14
16
  - Brian Morearty
15
17
  - Colin Kelley
@@ -23,14 +25,12 @@ authors:
23
25
  - Masafumi Okura
24
26
  - Masayuki Yamamoto
25
27
  - Math Ieu
26
- - Patrik Wenger
27
28
  - Ryan Musgrave
28
29
  - Salim Semaoune
29
30
  - Shannon Skipper
30
31
  - Sokolov Yura
31
32
  - Stefan Wrobel
32
33
  - Trevor Turk
33
- autorequire:
34
34
  bindir: bin
35
35
  cert_chain:
36
36
  - |
@@ -62,7 +62,7 @@ cert_chain:
62
62
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
63
63
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
64
64
  -----END CERTIFICATE-----
65
- date: 2024-06-23 00:00:00.000000000 Z
65
+ date: 2025-01-31 00:00:00.000000000 Z
66
66
  dependencies:
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: console
@@ -70,20 +70,14 @@ dependencies:
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: '1.25'
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: 1.25.2
73
+ version: '1.29'
77
74
  type: :runtime
78
75
  prerelease: false
79
76
  version_requirements: !ruby/object:Gem::Requirement
80
77
  requirements:
81
78
  - - "~>"
82
79
  - !ruby/object:Gem::Version
83
- version: '1.25'
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- version: 1.25.2
80
+ version: '1.29'
87
81
  - !ruby/object:Gem::Dependency
88
82
  name: fiber-annotation
89
83
  requirement: !ruby/object:Gem::Requirement
@@ -104,22 +98,42 @@ dependencies:
104
98
  requirements:
105
99
  - - "~>"
106
100
  - !ruby/object:Gem::Version
107
- version: '1.6'
108
- - - ">="
101
+ version: '1.7'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '1.7'
109
+ - !ruby/object:Gem::Dependency
110
+ name: traces
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
109
114
  - !ruby/object:Gem::Version
110
- version: 1.6.5
115
+ version: '0.15'
111
116
  type: :runtime
112
117
  prerelease: false
113
118
  version_requirements: !ruby/object:Gem::Requirement
114
119
  requirements:
115
120
  - - "~>"
116
121
  - !ruby/object:Gem::Version
117
- version: '1.6'
118
- - - ">="
122
+ version: '0.15'
123
+ - !ruby/object:Gem::Dependency
124
+ name: metrics
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '0.12'
130
+ type: :runtime
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
119
135
  - !ruby/object:Gem::Version
120
- version: 1.6.5
121
- description:
122
- email:
136
+ version: '0.12'
123
137
  executables: []
124
138
  extensions: []
125
139
  extra_rdoc_files: []
@@ -130,7 +144,9 @@ files:
130
144
  - lib/async/clock.rb
131
145
  - lib/async/condition.md
132
146
  - lib/async/condition.rb
147
+ - lib/async/console.rb
133
148
  - lib/async/idler.rb
149
+ - lib/async/limited_queue.rb
134
150
  - lib/async/list.rb
135
151
  - lib/async/node.rb
136
152
  - lib/async/notification.rb
@@ -145,11 +161,18 @@ files:
145
161
  - lib/async/version.rb
146
162
  - lib/async/waiter.md
147
163
  - lib/async/waiter.rb
164
+ - lib/async/worker_pool.rb
148
165
  - lib/async/wrapper.rb
149
166
  - lib/kernel/async.rb
150
167
  - lib/kernel/sync.rb
168
+ - lib/metrics/provider/async.rb
169
+ - lib/metrics/provider/async/task.rb
170
+ - lib/traces/provider/async.rb
171
+ - lib/traces/provider/async/barrier.rb
172
+ - lib/traces/provider/async/task.rb
151
173
  - license.md
152
174
  - readme.md
175
+ - releases.md
153
176
  homepage: https://github.com/socketry/async
154
177
  licenses:
155
178
  - MIT
@@ -157,7 +180,6 @@ metadata:
157
180
  documentation_uri: https://socketry.github.io/async/
158
181
  funding_uri: https://github.com/sponsors/ioquatix/
159
182
  source_code_uri: https://github.com/socketry/async.git
160
- post_install_message:
161
183
  rdoc_options: []
162
184
  require_paths:
163
185
  - lib
@@ -165,15 +187,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
187
  requirements:
166
188
  - - ">="
167
189
  - !ruby/object:Gem::Version
168
- version: 3.1.1
190
+ version: '3.1'
169
191
  required_rubygems_version: !ruby/object:Gem::Requirement
170
192
  requirements:
171
193
  - - ">="
172
194
  - !ruby/object:Gem::Version
173
195
  version: '0'
174
196
  requirements: []
175
- rubygems_version: 3.5.11
176
- signing_key:
197
+ rubygems_version: 3.6.2
177
198
  specification_version: 4
178
199
  summary: A concurrency framework for Ruby.
179
200
  test_files: []
metadata.gz.sig CHANGED
Binary file