gpt4 book ai didi

c# - 开始异步操作,稍后等待

转载 作者:太空狗 更新时间:2023-10-29 21:39:47 28 4
gpt4 key购买 nike

我现在才开始玩异步和等待。我有 8 个单独的数据库调用,有些依赖于其他调用。我希望能够启动 3 个异步方法,然后当某个 1 返回时,启动另外 3 个,然后当某个 1 从那里返回时,再启动 2 个。我目前正在使用 3 个 Parallel.Invoke 方法来完成此操作,但每个并行都必须等到 ALL methods 返回。我只关心 1 方法 返回,其他方法可以在后台运行,直到 await Task.WhenAll(t1,t2,t3,...,t6) 在结尾。 有没有办法用 async/await 来解决这个问题?

我知道 await 不会阻塞,但它会停止执行我的 main 方法(w/8 db 调用),直到值从该方法返回(就像同步方法一样)。

最佳答案

您可以使用 Task.WhenAny 等待几个任务中的任何一个:

var completedTask = await Task.WhenAny(t1, t2, t3, ...);

如果你有一个更复杂的依赖结构,那么我建议用 async 方法来表示它:

static async Task DoMasterOperationAsync()
{
var result = await StartSomething();
await Task.WhenAll(DoComplexOperationAsync(), result.NextT1Async());
}

static async Task DoComplexOperationAsync()
{
var result1 = await T1Async();
await Task.WhenAll(result1.NextT1Async(), result1.NextT2Async(), result1.NextT3Async());
}

await Task.WhenAll(DoMasterOperationAsync(), t2, t3, ...);

关于c# - 开始异步操作,稍后等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18937705/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com