Commit Graph
16 Commits
Author SHA1 Message Date
Fabian Fett 6aa9347d9b Readd module _NIOConcurrency to not break adopters (#1970) 2021-09-23 16:50:53 +02:00
Fabian Fett 9e1552ceaf Move AsyncAwait helpers into NIOCore (#1969)
- Moved the `AsyncAwaitSupport.swift` to `NIOCore`
- Removed the `_NIOConcurrency` target
2021-09-23 14:14:49 +02:00
Cory Benfield 8e44ee1f27 Only include concurrency features on new OSes (#1966)
Motivation:

Swift 5.5 provides concurrency support on almost all platforms where it
is available. However, the Xcode 13 GM currently provides a macOS 11 SDK
with Swift 5.5, and the concurrency features are not available in that
SDK. As a result, NIO's concurrency features cause compile errors when
building the concurrency library on macOS using Xcode 13 GM.

Modifications:

- Only build the concurrency features when the concurrency library is
  present.

Result:

We can build NIO using Xcode 13 GM.
2021-09-23 08:08:34 +01:00
Fabian FettandGeorge Barnett 389cd9de57 Update NIOAsyncAwaitDemo to use correct @available checks (post WWDC '21) (#1941)
- Use correct @available checks in `NIOAsyncAwaitDemo` (post WWDC '21)
- Remove `import _Concurrency` statements

Result:
- Cleaner imports
- static-stdlib linking works again on 5.5 (it does not if we explicitly `import _Concurrency`)

Co-authored-by: George Barnett <gbarnett@apple.com>
2021-08-19 16:16:38 +02:00
Fabian Fett 94f41c4121 [Concurrency] completeWithTask expects to receive a @Sendable closure (#1943) 2021-08-19 12:03:46 +02:00
Cory BenfieldandGeorge Barnett 64285cbff2 Clean up dependencies and imports. (#1935)
Motivation:

As we've largely completed our move to split out our core abstractions,
we now have an opportunity to clean up our dependencies and imports. We
should arrange for everything to only import NIO if it actually needs
it, and to correctly express dependencies on NIOCore and NIOEmbedded
where they exist.

We aren't yet splitting out tests that only test functionality in
NIOCore, that will follow in a separate patch.

Modifications:

- Fixed up imports
- Made sure our protocols only require NIOCore.

Result:

Better expression of dependencies.

Co-authored-by: George Barnett <gbarnett@apple.com>
2021-08-12 13:49:46 +01:00
Si Beaumont e66b64e4e3 _NIOConcurrency: Rename completeWithAsync(_:) to completeWithTask(_:) and return task (#1911)
Return `Task` from `EventLoopPromise.completeWithAsync(_:)` wrapper.

Motivation:

Bridging an `async` function into NIO is done by calling `completeWithAsync(_ body:)` on an `EventLoopPromise`. This spins up a `Task` and `await`s the result of the `async` closure that was passed in and uses the result to fulfil the promise with the value of the function, if it was successful, or with the error, if the function threw.

In some cases we may want to cancel this operation from the outside.

Modifications:

This patch adds a discardable return value to `EventLoopPromise.completeWithAsync(_:)` which is the `Task` it creates.

Result:

Users of `EventLoopPromise.completeWithAsync(_:)` are now able to explicitly cancel the `Task` that is being used to fulfil the promise.
2021-08-03 09:31:08 +01:00
Si Beaumont 7f3a2f56b0 Add async implementation of EventLoopGroup.shutdownGracefully to _NIOConcurrency (#1879)
* Add async implementation of EventLoopGroup.shutdownGracefully to _NIOConcurrency

Signed-off-by: Si Beaumont <beaumont@apple.com>

* fixup: Move elg lifecycle into async function in async demo

* fixup: Ensure continuation is run exactly once

* fixup: Shutdown event loop group in catch in async demo
2021-06-14 10:51:42 +01:00
Cory Benfield 67f0843653 Concurrency features are runtime-specific. (#1876)
Motivation:

The Swift concurrency features are only available in specific releases
of platforms where the Swift runtime ships with the platform. We need to
add availability guards to reflect that.

Modifications:

- Added appropriate availability guards for the async/await methods.

Result:

More likely to compile on Apple platforms.
2021-06-10 11:23:53 +01:00
Tim Condon 6d05b4f64b Update _NIOConcurrency for Swift 5.5 latest changes (#1872) 2021-06-09 10:41:47 +01:00
Johannes Weiss b23f40b4fa add Swift 5.5 job (#1845) 2021-06-01 18:58:56 +01:00
Cory Benfield 47b3501592 Fix spelling of detach (#1865)
Motivation:

The spelling of detach changed. This patch adopts the new spelling.

Modifications:

Changed detach to Task.detached.

Result:

5.5 should build again.
2021-06-01 10:33:06 +01:00
Adam Fowler f6936ae813 Wrap concurrency code with @available(macOS etc) (#1809) 2021-04-19 12:07:52 +01:00
Johannes Weiss bd61da436a async/await: adopt latest "main" renames (#1802)
Motivation:

On Swift's main branch Task.runDetached has been renamed to detach.

Modifications:

Adopt the new spelling.

Result:

Compiles again on the main nightlies.
2021-04-13 14:50:40 +01:00
Johannes Weiss 4220c7a16a fix #if AsyncAwait check (#1791)
Motivation:

I accidentally put in the wrong check for A/A, thanks @theMomax for
spotting!

Modification:

Fix the check to be

```
#if compiler(>=5.4) // we cannot write this on one line with `&&` because Swift 5.0 doesn't like it...
#if compiler(>=5.4) && $AsyncAwait
```

which works on Swift 5.0+.

Result:

Correct checks.
2021-04-06 14:43:34 +01:00
Johannes Weiss 75b52ab955 async/await support (#1701)
Motivation:

The async/await proposal has entered the review phase, so we may want to
start looking into NIO with async/await.

Modifications:

- Add `EventLoopFuture.get() throws await`
- Add `ChannelOutboundInvoker` `async` methods

Result:

If async/await were actually implemented, you could use NIO together
with async/wait. So far, you can only compile your projects.
2021-03-31 12:52:04 +01:00