更新cli的进展吧在异步的任务

0

的问题

我有一个迅速cli的应用程序,其中的一个步 Task 正在使用。 我想告诉进度条的基础上取得的进展的任务。 我使用的 进展。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所以请原谅我。

我理解的错误信息,但是怎么可能我周围的工作,和捕捉所取得的进展更新我的吧?

1

最好的答案

1

该方案是利用一个演员的实例这样的,

actor Bar {
   var progressBar = ProgressBar(count: 100)
   func setValue(_ value: Int) {
       progressBar.setValue(value)
   }
}
        
let bar = Bar()

然后在任务。

await bar.setValue(Int(fractionComplete * 100))

基于 这一 明显的下降.

2021-11-23 19:26:31

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................