相关疑难解决方法(0)

运行多个异步任务并等待它们全部完成

我需要在控制台应用程序中运行多个异步任务,并在进一步处理之前等待它们全部完成.

那里有很多文章,但我读的越多越好.我已经阅读并理解了Task库的基本原理,但我显然错过了某处的链接.

我知道可以将任务链接起来,以便它们在另一个完成之后开始(这几乎是我读过的所有文章的场景),但我希望我的所有任务同时运行,我想知道一次他们都完成了.

对于这样的场景,最简单的实现是什么?

.net c# asynchronous task-parallel-library async-await

241
推荐指数
7
解决办法
22万
查看次数

如果在一个中发生错误,请关闭多个goroutine

考虑这个功能:

func doAllWork() error {
    var wg sync.WaitGroup
    wg.Add(3)
    for i := 0; i < 2; i++ {
        go func() {
            defer wg.Done()
            for j := 0; j < 10; j++ {
                result, err := work(j)
                if err != nil {
                    // can't use `return err` here
                    // what sould I put instead ? 
                    os.Exit(0)
                }
            }
        }()
    }
    wg.Wait()
    return nil
}
Run Code Online (Sandbox Code Playgroud)

在每个goroutine中,该函数work()被调用10次.如果一个调用work()在任何正在运行的goroutine中返回错误,我希望所有goroutine立即停止,并退出程序.可以os.Exit()在这里使用吗?我该怎么处理?


编辑:这个问题不同于如何停止goroutine,因为我需要关闭所有goroutine如果一个错误发生

error-handling synchronization exit go goroutine

11
推荐指数
2
解决办法
4303
查看次数