18:swift-并发

 

 

正文

mport UIKit

class Complicate18VC: UIViewController {

    override func viewDidLoad()  {
        super.viewDidLoad()

        view.backgroundColor = .white
        self.title = "18:并发"
        
        
        // 2:任务是可以作为你程序一部分异步运行的工作单位。所有异步代码都会作为某任务的一部分运行。
        Task {
            await testAsynFunc()
            print("aaaa")
        }
        print("bbbbb")
        
        // 3:任务组    TaskGroup
        
        // 4: 行为体,线程安全
        Task {
            let logger = TemperatureLogger(label: "Outdoors", measurement: 25)
            print(await logger.max)
        }
        
        /* 5:可发送类型 Sendable
         任务和行为体可以让你将程序拆分成能够安全并发执行的小部分。在一个任务或者行为体实例中,包含可变状态的那部分程序,比如变量和属性,就被叫做并发域。某些种类的数据不能在并发域之间共享,因为那些数据包含了可变状态,却又没有针对重叠访问进行防护。

         可以在并发域之间进行共享的类型,就是所谓的可发送类型。
         */
        
    }
    
    /*
     1:定义异步函数
        要标记对应函数或者方法是异步的,你在声明中形式参数的后面使用 async  关键字, 和你使用 throw  关键字一样。
        如果函数或者方法返回值,就把 async  写在返回箭头( -> )之前。比如说,这里是你可能写的在相册中获取照片名称方法:
     */
    
    // 异步函数
    func testAsynFunc() async {
        await Task.sleep(2 * 1_000_000_000)  // Two seconds
        print("异步函数")
    }
}


/* 4:**** 行为体 actor
    使用 actor 关键字引入行为体,跟着是它写在一对花括号中的定义。
    TemperatureLogger 行为体拥有其他行为体外代码可以访问的属性,并且限制了 max 属性只能是行为体内代码才能更新最大值。
 */
actor TemperatureLogger {
    let label: String
    var measurements: [Int]
    // 访问max
    private(set) var max: Int
 
    init(label: String, measurement: Int) {
        self.label = label
        self.measurements = [measurement]
        self.max = measurement
    }
}

 

posted on 2023-03-09 20:05  风zk  阅读(29)  评论(0编辑  收藏  举报

导航