Warm tip: This article is reproduced from serverfault.com, please click

c#-为什么异步函数的简写可以在没有 async 或 await 的情况下工作?

(c# - Why does shorthand for asynchronous functions work without having async or await?)

发布于 2021-10-13 22:28:14

在编写异步函数时,通常如果你没有明确地编写器await或者async你的编译器会抛出错误或警告。下面的正确语法示例:

public async Task<List<TEntity>> GetEntitiesAsync() =>
            await TEntityRepository.GetAllAsync();

现在以下仍然有效,它是异步的并返回一个 Task<List>

public Task<List<TEntity>> GetEntitiesAsync() =>
            TEntityRepository.GetAllAsync();

为什么第二个仍然有效

Questioner
CorrieJanse
Viewed
0
ThisGuy 2021-10-14 06:49:56

两个调用都返回相同的任务,因此它们实际上是相同的。

为了在方法中使用“等待”,该方法必须标记为异步。由于第二个不使用 await,因此不需要将其标记为 async。

而已。

话虽如此,这样做可能不是一个好主意,因为@TheGeneral提到的文章中描述了一些陷阱: https://blog.stephencleary.com/2016/12/eliding-async-await。 html