プロトコル


AsyncSequence


その要素への非同期、順次、反復アクセスを提供する型。


iOS 13.0+ iPadOS 13.0+ Mac Catalyst 13.0+ macOS 10.15+

tvOS 13.0+ visionOS 1.0+ watchOS 6.0+

protocol AsyncSequence<Element, Failure>




概観


AsyncSequence は Sequence 型に似ており、値のリストを一つずつステップ実行できますが、非同期性が追加されています。AsyncSequence は、最初に使用する際に、すべての値、一部の値、またはまったく値が使用できない場合があります。代わりに、await を使用して、値が使用可能になったときに受け取ります。


Sequence と同様に、AsyncSequence は通常、for await-in ループを使用して反復処理します。ただし、呼び出し元が値を待機しなければならない場合があるため、await キーワードを使用して下さい。以下の例は、1 から howHigh 値までの Int 値を生成するカスタムの AsyncSequence である Counter を反復処理する方法を示しています。


for await number in Counter(howHigh: 10) {
    print(number, terminator: " ")
}
// Prints "1 2 3 4 5 6 7 8 9 10 "

AsyncSequence は値を生成したり保持したりするのではなく、値へのアクセス方法を定義するだけです。値の型を Element という関連型として定義するとともに、AsyncSequence は makeAsyncIterator() メソッドを定義します。このメソッドは AsyncIterator 型のインスタンスを返します。標準の IteratorProtocol と同様に、AsyncIteratorProtocol は要素を生成するための単一の next() メソッドを定義します。違いは、AsyncIterator は next() メソッドを async として定義し、呼び出し元は await キーワードを使用して次の値を待機する必要があることです。


AsyncSequence は、標準ライブラリ内の基本的な Sequence が提供する操作をモデルにして、あなたが受信した要素を処理するためのメソッドも定義しています。メソッドには、単一の値を返すものと、別の AsyncSequence を返すものの 2 つのカテゴリがあります。


単一値のメソッドは、for await-in ループを必要とせず、代わりに単一の await 呼び出しで済みます。例えば、contains(_:) メソッドは、与えられた値が AsyncSequence 内に存在するかどうかを示すブール値を返します。前の例の Counter シーケンスを仮定すると、1 行の呼び出しでシーケンスメンバーの存在をテストできます。


let found = await Counter(howHigh: 10).contains(5) // true

別の AsyncSequence を返すメソッドは、メソッドの意味に固有の型を返します。たとえば、.map(_:) メソッドは AsyncMapSequence を返します (map(_:) メソッドに提供したクロージャがエラーを throw できる場合は、AsyncThrowingMapSequence を返します)。返されたシーケンスは、シーケンスの次のメンバーを積極的に待機しないため、呼び出し元はいつ処理を開始するかを決定できます。通常、これらのシーケンスは、最初に使用した基本の AsyncSequence と同様に、for await-in を使用して反復処理します。以下の例では、map(_:) メソッドは、Counter シーケンスから受け取った各 Int を String に変換します。


let stream = Counter(howHigh: 10)
    .map { $0 % 2 == 0 ? "Even" : "Odd" }
for await s in stream {
    print(s, terminator: " ")
}
// Prints "Odd Even Odd Even Odd Even Odd Even Odd Even "




トピックス


反復子の作成


func makeAsyncIterator() -> Self.AsyncIterator

この非同期シーケンスの要素を生成する非同期反復子を作成します。

必須


associatedtype AsyncIterator : AsyncIteratorProtocol

この非同期シーケンスの要素を生成する非同期反復子の型。

必須


protocol AsyncIteratorProtocol

シーケンスの値を 1 つずつ非同期的に提供する型。


associatedtype Element

この非同期シーケンスによって生成される要素の型。

必須



要素の検索


func contains(Self.Element) async rethrows -> Bool

非同期シーケンスに与えられた要素が含まれているかどうかを示すブール値を返します。


func contains(where: (Self.Element) async throws -> Bool) async rethrows -> Bool

非同期シーケンスに、与えられた述語を満たす要素が含まれているかどうかを示すブール値を返します。


func allSatisfy((Self.Element) async throws -> Bool) async rethrows -> Bool

非同期シーケンスによって生成されたすべての要素が与えられた述語を満たしているかどうかを示すブール値を返します。


func first(where: (Self.Element) async throws -> Bool) async rethrows -> Self.Element?

指定された述語を満たすシーケンスの最初の要素を返します。


func min() async rethrows -> Self.Element?

比較可能な要素の非同期シーケンス内の最小要素を返します。


func min(by: (Self.Element, Self.Element) async throws -> Bool) async rethrows -> Self.Element?

与えられた述語を要素間の比較として使用して、非同期シーケンス内の最小要素を返します。


func max() async rethrows -> Self.Element?

比較可能な要素の非同期シーケンス内の最大要素を返します。


func max(by: (Self.Element, Self.Element) async throws -> Bool) async rethrows -> Self.Element?

与えられた述語を要素間の比較として使用して、非同期シーケンス内の最大要素を返します。



要素の選択


func prefix(Int) -> AsyncPrefixSequence<Self>

基本非同期シーケンスの最初の要素を含む、指定された最大長さまでの非同期シーケンスを返します。


struct AsyncPrefixSequence

基本非同期シーケンスの初期要素を含む、指定された最大長までの非同期シーケンス。


func prefix(while: (Self.Element) async -> Bool) rethrows -> AsyncPrefixWhileSequence<Self>

与えられた述語を満たす基本シーケンスの最初の連続要素を含む非同期シーケンスを返します。


struct AsyncPrefixWhileSequence

与えられた述語を満たす基本シーケンスの最初の連続要素を含む非同期シーケンス。


func prefix(while: (Self.Element) async throws -> Bool) rethrows -> AsyncThrowingPrefixWhileSequence<Self>

与えられた、エラーを throw する述語を満たす基本シーケンスの最初の連続要素を含む非同期シーケンスを返します。


struct AsyncThrowingPrefixWhileSequence

与えられた、エラーを throw する述語を満たす基本シーケンスの最初の連続要素を含む非同期シーケンス。



要素の除外


func dropFirst(Int) -> AsyncDropFirstSequence<Self>

基本非同期シーケンスから指定された数の要素を省略し、残りのすべての要素を渡します。


struct AsyncDropFirstSequence

基本非同期シーケンスから指定された数の要素を省略し、残りのすべての要素を渡す非同期シーケンス。


func drop(while: (Self.Element) async -> Bool) -> AsyncDropWhileSequence<Self>

与えられたクロージャが false を返すまで、基本非同期シーケンスから要素を省略し、その後、残りのすべての要素を渡します。




@@@@@@@@@@@@@@
10/21ここまで
@@@@@@@@@@@@@@


struct AsyncDropWhileSequence

与えられたクロージャが false を返すまで基本シーケンスから要素を省略し、その後残りのすべての要素を渡す非同期シーケンス。


func drop(while: (Self.Element) async throws -> Bool) -> AsyncThrowingDropWhileSequence<Self>

与えられた、エラーを throw するクロージャが false を返すまで、基本シーケンスから要素を省略し、その後、残りのすべての要素を渡します。


struct AsyncThrowingDropWhileSequence

与えられた、エラーを throw するクロージャが false を返すまで基本シーケンスから要素を省略し、その後残りのすべての要素を渡す非同期シーケンス。


func filter((Self.Element) async -> Bool) -> AsyncFilterSequence<Self>

与えられた述語を満たす基本シーケンスの要素を順番に格納する非同期シーケンスを作成します。


struct AsyncFilterSequence

与えられた述語を満たす基本シーケンスの要素を順番に格納する非同期シーケンス。


func filter((Self.Element) async throws -> Bool) -> AsyncThrowingFilterSequence<Self>

与えられた、エラーを throw する述語を満たす基本シーケンスの要素を順番に格納する非同期シーケンスを作成します。


struct AsyncThrowingFilterSequence

与えられた、エラーを throw する述語を満たす基本シーケンスの要素を順番に格納する非同期シーケンス。




@@@@@@@@@@@@@@
10/18ここまで
@@@@@@@@@@@@@@


結果へのアクセス


var value: Success

throw するタスクが完了した後の結果。


var value: Success

throw しないタスクが完了した後の結果。


var result: Result<Success, Failure>

throw するタスクが完了した後の結果またはエラー。



タスクのキャンセル


struct CancellationError

タスクがキャンセルされたことを示すエラー。


func cancel()

このタスクをキャンセルします。


var isCancelled: Bool

タスクの実行を停止すべきかどうかを示すブール値。


static var isCancelled: Bool

タスクの実行を停止すべきかどうかを示すブール値。


static func checkCancellation() throws

タスクがキャンセルされた場合エラーを throw します。


func withTaskCancellationHandler<T>(handler: () -> Void, operation: () async throws -> T) async rethrows -> T

  廃止  


func withTaskCancellationHandler<T>(operation: () async throws -> T, onCancel: () -> Void, isolation: isolated (any Actor)?) async rethrows -> T

現在のタスクがキャンセルされた場合に直ちに呼び出されるキャンセルハンドラを使用して操作を実行します。



実行の一時停止


static func yield() async

現在のタスクを一時停止し、他のタスクの実行を許可します。


static func sleep(nanoseconds: UInt64) async throws

現在のタスクを少なくともナノ秒単位で与えられた期間中断します。


static func sleep<C>(for: C.Instant.Duration, tolerance: C.Instant.Duration?, clock: C) async throws

与えられた期間、現在のタスクを中断します。


static func sleep<C>(until: C.Instant, tolerance: C.Instant.Duration?, clock: C) async throws

許容範囲内で与えられた期限まで現在のタスクを一時停止します。



タスクの比較


static func == (Task<Success, Failure>, Task<Success, Failure>) -> Bool

2 つの値が等しいかどうかを示すブール値を返します。


static func != (Self, Self) -> Bool

2 つの値が等しくないかどうかを示すブール値を返します。


var hashValue: Int

ハッシュ値です。


func hash(into: inout Hasher)

この値の必須コンポーネントを与えられたハッシュ関数に入力してハッシュします。



廃止


typealias Group   廃止  


typealias Handle   廃止  


typealias Priority   廃止  


static func CancellationError() -> CancellationError   廃止  


func getResult() async -> Result<Success, Failure>   廃止  


func get() async throws -> Success   廃止  


static func sleep(UInt64) async   廃止  


static func suspend() async   廃止  


static func withCancellationHandler<T>(handler: () -> Void, operation: () async throws -> T) async rethrows -> T   廃止  



イニシャライザー


init(name: String?, executorPreference: (any TaskExecutor)?, priority: TaskPriority?, operation: sending () async throws -> Success)

与えられた throw する操作を、新しい 非構造化 のトップレベルタスクの一部として非同期的に実行します。


init(name: String?, executorPreference: (any TaskExecutor)?, priority: TaskPriority?, operation: sending () async -> Success)

与えられた throw しない操作を、新しい 非構造化 トップレベルタスクの一部として非同期的に実行します。


init(name: String?, priority: TaskPriority?, operation: sending () async -> Success)

与えられた throw しない操作を、新しい 非構造化 トップレベルタスクの一部として非同期的に実行します。


init(name: String?, priority: TaskPriority?, operation: sending () async throws -> Success)

与えられた throw する操作を、新しい 非構造化 のトップレベルタスクの一部として非同期的に実行します。



インスタンスメソッド


func escalatePriority(to: TaskPriority)

このタスクのタスク priority (優先度) を手動で newPriority に拡大します。   Beta  


func get() async -> Success   廃止  



型プロパティ


static var name: String?

タスクの作成中に設定されている場合、現在のタスクの人間が読める名前を返します。

  Beta  



型メソッド


static func detached(name: String?, executorPreference: (any TaskExecutor)?, priority: TaskPriority?, operation: sending () async throws -> Success) -> Task<Success, any Error>

与えられた throw する操作を、新しい 非構造化の分離された トップレベルタスクの一部として非同期的に実行します。


static func detached(name: String?, executorPreference: (any TaskExecutor)?, priority: TaskPriority?, operation: sending () async -> Success) -> Task<Success, Never>

与えられた throw しない操作を、新しい 非構造化の分離された トップレベルタスクの一部として非同期的に実行します。


static func detached(name: String?, priority: TaskPriority?, operation: sending () async throws -> Success) -> Task<Success, any Error>

与えられた throw する操作を、新しい 非構造化の分離された トップレベルタスクの一部として非同期的に実行します。


static func detached(name: String?, priority: TaskPriority?, operation: sending () async -> Success) -> Task<Success, Never>

与えられた throw しない操作を、新しい 非構造化の分離された トップレベルタスクの一部として非同期的に実行します。


static func immediate(name: String?, priority: TaskPriority?, operation: sending () async -> Success) -> Task<Success, Never>

呼び出しスレッド/タスクのコンテキストで新しいタスクを作成し、すぐに実行を開始します。

  Beta  


static func immediate(name: String?, priority: TaskPriority?, operation: sending () async throws -> Success) -> Task<Success, any Error>

呼び出しスレッド/タスクのコンテキストで新しいタスクを作成し、すぐに実行を開始します。

  Beta  


static func runDetached(priority: TaskPriority?, operation: () async throws -> Success) -> Task<Success, any Error>

廃止されました。ソース互換性の理由からのみ利用可能です。

  廃止  


static func runDetached(priority: TaskPriority?, operation: () async -> Success) -> Task<Success, Never>

廃止されました。ソース互換性の理由からのみ利用可能です。

  廃止  


static func withGroup<TaskResult, BodyResult>(resultType: TaskResult.Type, returning: BodyResult.Type, body: (inout Task<Success, Failure>.Group<TaskResult>) async throws -> BodyResult) async rethrows -> BodyResult

  廃止  



デフォルトの実装


Equatable の実装


Hashable の実装





関連


以下に準拠


Copyable

Success が Copyable に準拠し, Success が Escapable に準拠し, Success が Sendable に準拠し, Failure が Error に準拠している場合準拠します。


Equatable

Success が Copyable に準拠し, Success が Escapable に準拠し, Success が Sendable に準拠し, Failure が Error に準拠している場合準拠します。


Hashable

Success が Copyable に準拠し, Success が Escapable に準拠し, Success が Sendable に準拠し, Failure が Error に準拠している場合準拠します。


Sendable

SendableMetatype



以下も見よ


タスク


struct TaskGroup

動的に作成された子タスクを含むグループ。


func withTaskGroup<ChildTaskResult, GroupResult>(of: ChildTaskResult.Type, returning: GroupResult.Type, isolation: isolated (any Actor)?, body: (inout TaskGroup<ChildTaskResult>) async -> GroupResult) async -> GroupResult

動的な数の子タスクを含めることができる新しいスコープを開始します。




@@@@@@@@@@@@@@
9/12ここまで
@@@@@@@@@@@@@@


struct ThrowingTaskGroup

Throw し、動的に作成された子タスクを含むグループ。


func withThrowingTaskGroup<ChildTaskResult, GroupResult>(of: ChildTaskResult.Type, returning: GroupResult.Type, isolation: isolated (any Actor)?, body: (inout ThrowingTaskGroup<ChildTaskResult, any Error>) async throws -> GroupResult) async rethrows -> GroupResult

動的な数の throw する子タスクを含めることができる新しいスコープを開始します。


struct TaskPriority

タスクの優先度。


struct DiscardingTaskGroup

動的に作成された子タスクを含む破棄するグループ。


func withDiscardingTaskGroup<GroupResult>(returning: GroupResult.Type, isolation: isolated (any Actor)?, body: (inout DiscardingTaskGroup) async -> GroupResult) async -> GroupResult

動的な数の子タスクを含めることができる新しいスコープを開始します。


struct ThrowingDiscardingTaskGroup

動的に作成された子タスクを含む throw する破棄のグループ。


func withThrowingDiscardingTaskGroup<GroupResult>(returning: GroupResult.Type, isolation: isolated (any Actor)?, body: (inout ThrowingDiscardingTaskGroup<any Error>) async throws -> GroupResult) async throws -> GroupResult

動的な数の子タスクを含めることができる新しいスコープを開始します。


struct UnsafeCurrentTask

現在のタスクへの安全でない参照。














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ