timeouter
Version, currently 0.44 versions
- 0.4latestApr 10, 2021
- 0.3not indexedApr 10, 2021
- 0.2not indexedApr 10, 2021
- 0.1not indexedApr 10, 2021
github.com/kostya/timeouter
Simple timeouter
7 stars
0 dependents
License: MIT
Installation
# Add this to your shard.yml
dependencies:
timeouter:
github: kostya/timeouter
version: ~> 0.4Then run:
shards installshard.yml
- Crystal
>= 0.20.3- License
- MIT
- Author
- Konstantin Makarchev <kostya27@gmail.com>
Dependencies
This version declares no dependencies.
README
# Timeouter
Simple timeouter for crystal lang. Uses one coroutine, which triggered with precision interval. Also it avoid crystal memory leak with many coroutines: https://github.com/crystal-lang/crystal/issues/3333
## Installation
Add this to your application's `shard.yml`:
```yaml
dependencies:
timeouter:
github: kostya/timeouter
```
## Usage
```crystal
require "timeouter"
# set precision, 1 second by default
Timeouter.precision = 0.5.seconds
# spend 1.5.second
Timeouter.after(1.5.seconds).receive
```
## Helper: receive from Channel with timeout
```crystal
require "timeouter"
ch1 = Channel(Int32).new
ch2 = Channel(Int32).new
spawn do
sleep 2.0
ch1.send(1)
end
spawn do
sleep 0.5
ch2.send(2)
end
p Timeouter.receive_with_timeout(ch1, 1.seconds) # => nil
p Timeouter.receive_with_timeout(ch2, 1.seconds) # => 2
```
## Helper: send to Channel with timeout
```crystal
require "timeouter"
ch1 = Channel(Int32).new
ch2 = Channel(Int32).new
spawn do
sleep 2.0
p ch1.receive
end
spawn do
sleep 0.5
p ch2.receive
end
Timeouter.send_with_timeout(ch1, 1, 1.seconds) # => nil
Timeouter.send_with_timeout(ch2, 2, 1.seconds) # => true
# 2
```
## Receive from channel with timeout manually
```crystal
require "timeouter"
channel = Channel(Int32).new
after = Timeouter.after(1.0.seconds)
spawn do
sleep 10.0
channel.send(1)
end
t = Time.now
select
when result = channel.receive
# Cancel timeouter manyally
# it also would be cancel automatically
# but this is remove it fast from scheduler
# which allow less cpu usage
after.close
p result
when after.receive
p :timeouted
end
p Time.now - t
# => :timeouted
# => 1.000
```
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This release
- Version
0.4- Tagged
- Apr 10, 2021
- Commit
aa6c780905c7- Crystal
>= 0.20.3- Indexed
- yes
Dependents
No indexed shard depends on this one yet.
Repository
github.com/kostya/timeouter
Metadata
- Created
- Aug 12, 2026
- Updated
- Aug 12, 2026
- Synced
- Aug 12, 2026
- Versions
- 4