gpt4 book ai didi

c# - 返回任务的方法的不同实现

转载 作者:行者123 更新时间:2023-11-30 16:02:26 25 4
gpt4 key购买 nike

这是我在重构一些遗留代码时遇到的问题。

考虑一个返回Task的接口(interface)方法:

public interface IFoo
{
Task Bar();
}

Bar 方法的实现可以通过两种方式实现:

返回一个任务:

public class Foo1 : IFoo
{
public Task Bar()
{
return Task.Run(() =>
{
/* some work */
});
}
}

或者使用async ... await:

public class Foo2 : IFoo
{
public async Task Bar()
{
await Task.Run(() =>
{
/* some work */
});
}
}

这些实现在功能上是等效的,还是存在(可能是细微的)差异?

最佳答案

有很大的不同,因为使用 async-await 语法会导致编译器生成代码,一旦任务完成,这些代码实际上会继续通过 await 语句。此外,等待一个有错误的任务会导致异常冒泡到等待者,这意味着它不再被认为是未观察到的。我认为还有更多,我真的建议你看看 Jon Skeet 的 C# 5 Async course on pluralsight ,他实际上浏览了编译器生成的代码并对其进行了解释。

关于c# - 返回任务的方法的不同实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37586694/

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