gpt4 book ai didi

c# - 从使用 Task.WhenAll() 等待的任务分配时避免检查条件两次

转载 作者:行者123 更新时间:2023-12-04 17:11:11 25 4
gpt4 key购买 nike

是否有更好的方法来编写此异步代码(例如,这样我就不需要重复 if (myCondition) 两次)?我想避免在此处使用 Task.Run

var tasks = new List<Task>();
Task<String> t1 = null;
Task<String> t2 = null;

if (myCondition) {
t1 = getAsync();
tasks.Add(t1);
}

if (myOtherCondition) {
t2 = getAsync2();
tasks.Add(t2);
}

await Task.WhenAll(tasks)

if (myCondition) {
result.foo = await t1;
}

if (myOtherCondition) {
result.bar = await t2;
}

最佳答案

在不真正了解您的条件正在检查什么的情况下,我想我通常会将该检查移至与获取 foo 或 bar 实际相关的方法内。您的一种方法似乎比预期的要多。

另一种方法:

var fooTask = GetFoo();
var barTask = GetBar();

await Task.WhenAll(new [] { fooTask, barTask });
result.foo = (await fooTask) ?? result.foo;
result.bar = (await barTask) ?? result.bar;

// ...
async Task<string> GetFoo()
{
if (!myCondition) {
return Task.FromResult((string)null);
}
return await DoHeavyWorkFoo();
}

async Task<string> GetBar()
{
if (!myOtherCondition) {
return Task.FromResult((string)null);
}
return await DoHeavyWorkBar();
}

关于c# - 从使用 Task.WhenAll() 等待的任务分配时避免检查条件两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69416885/

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