迅速な並行処理
3178 ワード
非同期関数
同期関数とメソッドのいずれかを実行します.
例:
func listPhotos(inGallery name: String) async -> [String] {
let result = // some asynchronous networking code
return result
}
let photoNames = await listPhotos(inGallery: "Summer Vacation")
let sortedNames = photoNames.sorted()
let name = sortedNames[0]
let photo = await downloadPhoto(named: name)
show(photo)
プログラムの場所は非同期関数またはメソッドを呼び出すことができます.上の例では、配列の要素がすべて準備完了後に配列全体を一度に返す代わりに、ループの待機時に使用する非同期シーケンスを使用して一度にコレクションの1つの要素を待機します.
例:
import Foundation
let handle = FileHandle.standardInput
for try await line in handle.bytes.lines {
print(line)
}
Waitのループでは、AsyncSequenceプロトコルに準拠する任意の型に対して使用できます.シーケンスの場合も同様です.非同期関数の並列呼び出し
async let firstPhoto = downloadPhoto(named: photoNames[0])
async let secondPhoto = downloadPhoto(named: photoNames[1])
async let thirdPhoto = downloadPhoto(named: photoNames[2])
let photos = await [firstPhoto, secondPhoto, thirdPhoto]
show(photos)
構造的並行性
タスクは、プログラムの一部として非同期で実行できる作業単位です.すべての非同期コードはいくつかのタスクの一部として実行されます.
タスクは、タスクグループに子として追加することができます.
async let構文子タスクを作成します.
非構造化並行性
俳優
actor TemperatureLogger {
let label: String
var measurements: [Int]
private(set) var max: Int
init(label: String, measurement: Int) {
self.label = label
self.measurements = [measurement]
self.max = measurement
}
}
let logger = TemperatureLogger(label: "Outdoors", measurement: 25)
print(await logger.max)
Reference
この問題について(迅速な並行処理), 我々は、より多くの情報をここで見つけました https://dev.to/naveenragul/swift-concurrency-4ejlテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol