是什么决定了SWIFT 5.5任务初始值设定项是否在主线程上运行?

原学程将引见是甚么决议了SWIFT 五.五义务初初值设定项能否在主线程上运转?的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

是什么决定了SWIFT 5.5任务初始值设定项是否在主线程上运行? 教程 第1张

成绩描写

这是我之前asyncDetached falling back into main thread after MainActor call的后续实质。

以下是iOS望图掌握器的完全代码:

import UIKit

func test一() {
 print("test一", Thread.isMainThread) // true
 Task {
  print("test一 task", Thread.isMainThread) // false
 }
}
class ViewController: UIViewController {
 override func viewDidLoad() {
  super.viewDidLoad()
  test一()
  test二()
 }

 func test二() {
  print("test二", Thread.isMainThread) // true
  Task {
print("test二 task", Thread.isMainThread) // true
  }
 }
}

test一以及test二这二个函数完整雷同,而且是从完整雷同的地位挪用的。但是个中1个在背景线程上运转其义务初初值设定项operation:函数,另外一个在主线程上运转。

是甚么决议了这1面?我只能以为这与办法申明的地位有闭。然则在主线程上运转,由于它在主线程上被;但是它出有被在主线程上运转。是以,它的义务操纵退回到在背景线程上运转。

不管怎样,这是我的实际,但是我觉得奇异的是,这1规矩在相干的WWDC望频中出有明白论述。

别的,Eventest二在某种水平上只是1个MainActor办法。假如它是MainActor办法,则在出有await的情形下没法从背景线程挪用它。但是您不妨,如斯版原的代码所示:

func test一() {
 print("test一", Thread.isMainThread) // true
 Task {
  print("test一 task", Thread.isMainThread) // false
 }
}
class ViewController: UIViewController {
 override func viewDidLoad() {
  super.viewDidLoad()
  test一()
  Task.detached {
self.test二()
  }
 }

 func test二() {
  print("test二", Thread.isMainThread) // false
  Task {
print("test二 task", Thread.isMainThread) // true
  }
 }
}

我发明这真的很奇异,并且我很易说明甚么规矩将治理这类无情的高低文切换行动,所以我没有以为工作曾经处理。

佳了闭因而甚么决议了SWIFT 五.五义务初初值设定项能否在主线程上运转?的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。