Я всегда думал, что использование Task автоматически запускает трудоемкие задачи в фоновом потоке, обеспечивая отзывчивость пользовательского интерфейса.
Однако в следующем коде я заметил что моя функция fetchNotes (которая отнимает много времени) по-прежнему выполняется в основном потоке пользовательского интерфейса, поскольку UIViewController помечен как @MainActor.
Есть это то, о чем стоит беспокоиться? Повлияет ли это на скорость реагирования пользовательского интерфейса, если в основном потоке пользовательского интерфейса выполняется трудоемкая задача?
Интересно, что во время моих тестов, хотя выполнение fetchNotes занимает несколько секунд, мой пользовательский интерфейс не зависает. Почему пользовательский интерфейс не зависает, когда основной поток пользовательского интерфейса выполняет трудоемкую операцию?
Следует ли мне когда-нибудь рассмотреть возможность использования Task.detached?
Вот мой фрагмент кода.
class MainViewController: UIViewController {
private func fetchNotesAsync() {
print(">>>> fetchNotesAsync \(Thread.isMainThread)") // true
Task {
print(">>>> Task \(Thread.isMainThread)") // true
let noteWrappers = await fetchNotes()
...
}
}
private func fetchNotes() async -> [NoteWrapper] {
// Executing firebase query.getDocuments() to retrieve remote documents.
// query.getDocuments() is a firebase library async function
let querySnapshot = try await query.getDocuments()
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... t-ui-respo
Выполнение трудоемких задач на @MainActor: стоит ли беспокоиться об отзывчивости пользовательского интерфейса? ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение