gpt4 book ai didi

c# - 一路异步?

转载 作者:可可西里 更新时间:2023-11-01 03:10:27 25 4
gpt4 key购买 nike

在尝试理解新的异步/等待模式时,我有一个问题找不到答案,即我是否应该用异步装饰我的方法,如果我打算从其他异步函数调用这些方法,或者只需返回 Task在什么地方合适?

换句话说,A、B 或 C 类中哪一个最好,为什么?

class A<T>
{
public async Task<T> foo1() //Should be consumed
{
return await foo2();
}

public async Task<T> foo2() //Could be consumed
{
return await foo3();
}

private async Task<T> foo3() //Private
{
return await Task.Run(...);
}
}

class B<T>
{
public async Task<T> foo1() //Should be consumed
{
return await foo2();
}

public async Task<T> foo2() //Could be consumed
{
return await foo3();
}

private Task<T> foo3() //Private
{
return Task.Run(...);
}
}

class C<T>
{
public async Task<T> foo1() //Should be consumed
{
return await foo2();
}

public Task<T> foo2() //Could be consumed
{
return foo3();
}

private Task<T> foo3() //Private
{
return Task.Run(...);
}
}

过度装饰方法似乎是多余的,所以我自然倾向于C , 但同时使用 Task<T> 感觉有些尴尬除非你使用 await关键字。

最佳答案

两个版本的工作原理相同,唯一的区别是当您使用 await 时在这里,您会受到一些性能损失(因为必须设置状态机并且很可能会使用延续)。

因此,这归结为一个权衡:您是否希望您的方法在可读性稍差的情况下更加高效?还是您愿意为了可读性而牺牲性能?

通常,我会建议您首先考虑可读性,只有在性能分析告诉您值得时才关注性能。但在这种情况下,我认为可读性的增加很小,所以我可能不会使用 await .

还要注意你的类(class)C还不够远:foo1()也不需要 await .

关于c# - 一路异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12016322/

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