Async/watiate Timeout расширение [дублировать]IOS

Программируем под IOS
Ответить
Anonymous
 Async/watiate Timeout расширение [дублировать]

Сообщение Anonymous »

Я пытаюсь создать метод тайм -аута для задач Async/ждать. Я думал о добавлении метода в расширение задачи , но я получаю ошибки.
Вот мой код:
import Foundation

func test() async throws {
// ---> Error: Generic parameter 'Failure' could not be inferred
let result = try await Task.withTimeout(after: .seconds(0.1)) {
try await test2()
}
}

func test2() async throws -> Int {

}

extension Task {
static func withTimeout(
after duration: Duration,
operation: @escaping @Sendable () async throws -> T
) async throws -> T {
try await withThrowingTaskGroup(of: T.self) { group in
group.addTask {
try await operation()
}

group.addTask {
try await Task.sleep(for: duration) // Error ----> Referencing static method 'sleep(for:tolerance:clock:)' on 'Task' requires the types 'Failure' and 'Never' be equivalent
throw CancellationError()
}

guard let result = try await group.next() else {
throw CancellationError()
}

group.cancelAll()
return result
}
}
}
< /code>
Это две ошибки компиляции, которые я получаю: < /p>
Generic parameter 'Failure' could not be inferred
Referencing static method 'sleep(for:tolerance:clock:)' on 'Task' requires the types 'Failure' and 'Never' be equivalent
< /code>
Но я не понимаю этих ошибок. Если у кого -то есть идея ..
Редактировать: Нашел решение здесь: https://gist.github.com/swhitty/9be89df ... 916273bbb9, может кто -то не удалять это, потому что это поможет другим.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... -extension
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»