Swift 5.10 日本語化計画 : Swift 5.10


関数


withTaskCancellationHandler(operation:
onCancel:)


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


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

tvOS 13.0+ watchOS 6.0+ visionOS 1.0+

@backDeployed(before: macOS 13.3, iOS 16.4, watchOS 9.4, tvOS 16.4)
func withTaskCancellationHandler<T>(
operation: () async throws -> T,
onCancel handler: () -> Void
) async rethrows -> T




議論


これは、タスクがキャンセルされるとキャンセルハンドラーが常に即座に呼び出されるという点で、キャンセルを協調的に確認してそれに応答する操作とは異なります。たとえば、操作でキャンセルを決してチェックしないコードが実行されている場合でも、キャンセルハンドラーは引き続き実行され、クリーンアップコードを実行する機会が提供されます。


ロックを取得するキャンセルハンドラーは、デッドロックを回避するように注意しなければなりません。キャンセルハンドラーは、タスクまたは他のタスクに関連した内部ロックを保持している間に呼び出される可能性があります。継続の再開など、タスクに対する他の操作でも、これらと同じ内部ロックが取得される場合があります。したがって、キャンセルハンドラーがロックを取得しなければならない場合、そのロックを保持している間、他のコードはタスクをキャンセルしたり、継続を再開したりしてはなりません。


キャンセルをチェックせず、常に渡された operation を実行します。


operation は呼び出し元の実行コンテキストで実行され、クロージャ内に含まれるコードが停止しない限り、それ自体は停止しません。操作 (operation) の実行中にキャンセルが発生した場合、キャンセル handleroperation同時 に実行されます。



既にキャンセルされたタスク


すでにキャンセルされた TaskwithTaskCancellationHandler が使用される場合、操作が実行される直前に onCancel cancellation Handler が実行されます。これにより、キャンセルハンドラーは、オペレーションの実行後に実際の作業が実行されないようにするために、オペレーションが atomically にチェックする外部の "キャンセル済み" フラグを設定できるようになります。





以下も見よ


タスクのキャンセル


struct CancellationError

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


func cancel()

タスクの実行を停止すべきことを示します。

SuccessSendable に準拠し、FailureError に準拠する場合に使用できます。


var isCancelled: Bool

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

SuccessSendable に準拠し、FailureError に準拠する場合に使用できます。


static var isCancelled: Bool

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

Successnever であり、Failurenever である場合に使用できます。


static func checkCancellation() throws

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

Successnever であり、Failurenever である場合に使用できます。


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

  廃止  















トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ