在异步任务中更新 cli 进度条
Update cli progress bar in async Task
我有一个 Swift cli 应用程序,其中使用了异步 Task
。我想根据任务的进度显示进度条。我正在为酒吧使用 Progress.swift 包。
我的代码是这样的。
var bar = ProgressBar(count: 100)
let waiter = Task {
do {
for try await output in session.outputs {
switch output {
case .requestProgress(let request, let fractionComplete):
bar.setValue(Int(fractionComplete * 100))
}
}
} catch {
logger.error("Output: ERROR = \(String(describing: error))")
Foundation.exit(0)
}
}
我现在的问题是 bar.setValue()
出现以下错误
Mutation of captured var 'bar' in concurrently-executing code
.
我对 swift 很陌生,所以请多多包涵。
我确实理解错误消息,但我如何解决这个问题并获取进度以更新我的栏?
解决方案是使用这样的 actor 实例,
actor Bar {
var progressBar = ProgressBar(count: 100)
func setValue(_ value: Int) {
progressBar.setValue(value)
}
}
let bar = Bar()
然后在任务中。
await bar.setValue(Int(fractionComplete * 100))
基于this答案。
我有一个 Swift cli 应用程序,其中使用了异步 Task
。我想根据任务的进度显示进度条。我正在为酒吧使用 Progress.swift 包。
我的代码是这样的。
var bar = ProgressBar(count: 100)
let waiter = Task {
do {
for try await output in session.outputs {
switch output {
case .requestProgress(let request, let fractionComplete):
bar.setValue(Int(fractionComplete * 100))
}
}
} catch {
logger.error("Output: ERROR = \(String(describing: error))")
Foundation.exit(0)
}
}
我现在的问题是 bar.setValue()
Mutation of captured var 'bar' in concurrently-executing code
.
我对 swift 很陌生,所以请多多包涵。
我确实理解错误消息,但我如何解决这个问题并获取进度以更新我的栏?
解决方案是使用这样的 actor 实例,
actor Bar {
var progressBar = ProgressBar(count: 100)
func setValue(_ value: Int) {
progressBar.setValue(value)
}
}
let bar = Bar()
然后在任务中。
await bar.setValue(Int(fractionComplete * 100))
基于this答案。