gpt4 book ai didi

c# - C# 的最佳实践。用await传递参数可以吗?

转载 作者:行者123 更新时间:2023-12-03 15:52:54 25 4
gpt4 key购买 nike

传参数可以吗,用await ?这样做的优点和缺点是什么?

var results = MapResults(await GetDataAsync());

最佳答案

更新:这个问题是 the subject of my blog in March 2020 .有关此问题的更多讨论,请参阅它。谢谢你的有趣问题!

我将在这里假设您打算将其作为参数列表的唯一成员作为函数调用。

正如其他人所指出的,两者之间没有区别

x = M(await FAsync());


var f = await FAsync();
x = M(f);

这与
var ftask = FAsync();
x = M(await ftask)

所以你用哪种方式写并不重要,对吗?

考虑一下。

在该特定场景中,所有三个工作流程都是相同的。但是,如果我们只是稍微改变场景,这里就会存在潜在的差异。考虑:
x = M(await FAsync(), await GAsync());

这与
var f = await FAsync();
var g = await GAsync();
x = M(f, g);

我们对这个工作流程了解多少? GAsync 任务直到 FAsync 任务完成才开始! 但看起来这里有机会同时执行两个任务,这可能会更有效地使用当前线程!工作流程可能更好地写为:
var ftask = FAsync();
var gtask = GAsync();
x = M(await ftask, await gtask);

现在 FAsync 和 GAsync 任务都开始了,我们在两者都完成之前不会调用 M。

我的建议是仔细考虑你把你的等待放在哪里。记住, 等待旨在成为异步工作流中的一个点,在该点处工作流异步暂停,直到满足继续的先决条件 .如果您可以延迟等待任务,直到它实际上成为一个先决条件,那么您也许能够勉强获得性能上的胜利。

关于c# - C# 的最佳实践。用await传递参数可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60557038/

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