init(Element.Type, bufferingPolicy : AsyncStream<Element>.Continuation.BufferingPolicy, (AsyncStream<Element>.Continuation) -> Void)
enum AsyncStream.Continuation.BufferingPolicy
struct AsyncStream.Continuation
Availability
Technology
struct AsyncStream<Element>
Async
conforms to Async
, providing a convenient way to create an asynchronous sequence without manually implementing an asynchronous iterator. In particular, an asynchronous stream is well-suited to adapt callback- or delegation-based APIs to participate with async
-await
.
Async
はAsync
に準拠します、そして手動で非同期イテレータを実装することなく非同期シーケンスを作成するある簡便な方法を提供します。とりわけ、非同期ストリームは、コールバックや委任に基づくAPIをasync
-await
と関与するよう適応させるのに最適です。
You initialize an Async
with a closure that receives an Async
. Produce elements in this closure, then provide them to the stream by calling the continuation’s yield(_:)
method. When there are no further elements to produce, call the continuation’s finish()
method. This causes the sequence iterator to produce a nil
, which terminates the sequence. The continuation conforms to Sendable
, which permits calling it from concurrent contexts external to the iteration of the Async
.
あなたはAsync
を、Async
を受け取るあるクロージャで初期化します。要素それらをこのクロージャにおいて生み出して、それからそれらをストリームへと、継続のもつyield(_:)
メソッドを呼び出すことによって提供してください。それ以上は要素を生み出さない場合は、継続のもつfinish()
メソッドを呼び出してください。これはシーケンスイテレータにnil
を生み出させ、それはそのシーケンスを終端します。継続はSendable
に準拠します、それはAsync
の反復処理に関係がない並行文脈からそれを呼び出すことを許可します。
An arbitrary source of elements can produce elements faster than they are consumed by a caller iterating over them. Because of this, Async
defines a buffering behavior, allowing the stream to buffer a specific number of oldest or newest elements. By default, the buffer limit is Int
, which means the value is unbounded.
要素いくつかからなるある随意のソースは、要素それらを、それらのすべてにわたって反復している呼び出し側によってそれらが消費されるよりも速く生み出すことがありえます。このことから、Async
はあるバッファ挙動を定義して、ストリームに特定の数の古いまたは新しい要素をバッファすることを許可します。省略時では、バッファ限度はInt
です、それはその値が無制限であることを意味します。
To adapt existing callback code to use async
-await
, use the callbacks to provide values to the stream, by using the continuation’s yield(_:)
method.
既存のコールバックコードをasync
-await
を使うように適応させるには、コールバックそれらを使って値それらをストリームへと、継続のもつyield(_:)
メソッドを使うことによって提供してください。
Consider a hypothetical Quake
type that provides callers with Quake
instances every time it detects an earthquake. To receive callbacks, callers set a custom closure as the value of the monitor’s quake
property, which the monitor calls back as necessary.
ある仮定的なQuake
型を考えてください、それは呼び出し側それらにQuake
インスタンスそれらを、それがある地震を検出するたびごとに提供します。コールバックそれらを受け取るには、呼び出し側それらはあるあつらえのクロージャをモニタのもつquake
プロパティの値として設定します、それはモニタが必要に応じて折り返し呼び出しするものです。
To adapt this to use async
-await
, extend the Quake
to add a quakes
property, of type Async
. In the getter for this property, return an Async
, whose build
closure – called at runtime to create the stream – uses the continuation to perform the following steps:
これをasync
-await
を使うように適応させるには、Quake
を拡張してquakes
プロパティ、型Async
の、を加えてください。このプロパティに対するゲッターにおいて、あるAsync
を返してください、それのbuild
クロージャ – 実行時に呼び出されてストリームを作成するもの – は継続を使って以下の段階を追います:
Creates a Quake
instance.
あるQuake
インスタンスを作成します。
Sets the monitor’s quake
property to a closure that receives each Quake
instance and forwards it to the stream by calling the continuation’s yield(_:)
method.
モニタのもつquake
プロパティをあるクロージャへと設定します、それは各Quake
インスタンスを受け取って、そしてそれをストリームへと、継続のもつyield(_:)
メソッドを呼び出すことによって転送します。
Sets the continuation’s on
property to a closure that calls stop
on the monitor.
継続のもつon
プロパティをあるクロージャへと設定します、それはstop
をモニタ上で呼び出します。
Calls start
on the Quake
.
start
をQuake
上で呼び出します。
extension QuakeMonitor {
}
Because the stream is an Async
, the call point can use the for
-await
-in
syntax to process each Quake
instance as the stream produces it:
ストリームがAsync
であることから、呼び出しポイントはfor
-await
-in
構文を使用して各Quake
インスタンスをストリームがそれを生み出すにつれて処理できます:
init(Element.Type, bufferingPolicy : AsyncStream<Element>.Continuation.BufferingPolicy, (AsyncStream<Element>.Continuation) -> Void)
enum AsyncStream.Continuation.BufferingPolicy
struct AsyncStream.Continuation
init(unfolding: () -> Element?, onCancel : (@Sendable () -> Void)?)
func contains(Element) -> Bool
Element
conforms to Equatable
.
Element
がEquatable
に準拠する時に利用可能です。
func contains(where: (Element) -> Bool) -> Bool
func allSatisfy ((Element) -> Bool) -> Bool
func first(where: (Element) -> Bool) -> Element?
func min() -> Element?
Element
conforms to Comparable
.
Element
がComparable
に準拠する時に利用可能です。
func min(by: (Element, Element) -> Bool) -> Element?
func max() -> Element?
Element
conforms to Comparable
.
Element
がComparable
に準拠する時に利用可能です。
func max(by: (Element, Element) -> Bool) -> Element?
func prefix(Int) -> AsyncPrefixSequence<AsyncStream<Element>>
func prefix(while: (Element) -> Bool) -> AsyncPrefixWhileSequence<AsyncStream<Element>>
func dropFirst (Int) -> AsyncDropFirstSequence<AsyncStream<Element>>
func drop(while: (Element) -> Bool) -> AsyncDropWhileSequence<AsyncStream<Element>>
func filter((Element) -> Bool) -> AsyncFilterSequence<AsyncStream<Element>>
func map<Transformed>((Element) -> Transformed) -> AsyncThrowingMapSequence<AsyncStream<Element>, Transformed>
func map<Transformed>((Element) -> Transformed) -> AsyncMapSequence<AsyncStream<Element>, Transformed>
func compactMap <ElementOfResult>((Element) -> ElementOfResult?) -> AsyncCompactMapSequence<AsyncStream<Element>, ElementOfResult>
func compactMap <ElementOfResult>((Element) -> ElementOfResult?) -> AsyncThrowingCompactMapSequence<AsyncStream<Element>, ElementOfResult>
func flatMap <SegmentOfResult>((Element) -> SegmentOfResult) -> AsyncFlatMapSequence<AsyncStream<Element>, SegmentOfResult>
func flatMap <SegmentOfResult>((Element) -> SegmentOfResult) -> AsyncThrowingFlatMapSequence<AsyncStream<Element>, SegmentOfResult>
func reduce<Result>(Result, (Result, Element) -> Result) -> Result
func reduce<Result>(into: Result, (inout Result, Element) -> Void) -> Result
func makeAsyncIterator () -> AsyncStream<Element>.Iterator
struct AsyncStream.Iterator
typealias AsyncStream.AsyncIterator
protocol AsyncSequence
struct AsyncThrowingStream