无需等待的异步任务的第二次实现

sim*_*msi 4 c# asynchronous async-await

当我有一个返回任务 (void) 的接口但其中一个实现没有异步操作时,我该怎么办?

我的接口IDatabaseService有两个实现:FirestoreDatabaseServiceCacheDatabaseService。这是有道理的,FirestoreDatabaseService使用方法异步任务AddResult(ResultDto结果)作为方法的结果,但CacheDatabaseService只有一个列表,不需要的await,它基本上是一个无效的方法。

我收到警告“警告 CS1998 此异步方法缺少 'await' 运算符,将同步运行。考虑使用 'await' 运算符来等待非阻塞 API 调用,或使用 'await Task.Run(...)'”时在 CacheDatabaseService 异步实现方法。如果我删除异步,我必须返回一个任务,但 Task.FromResult 不适用于无效任务。

Gab*_*uci 9

该警告几乎总是意味着您的方法不应该是async.

async关键字真的只是允许使用的await。因此,如果您不使用await,则不需要async.

如果AddResult 必须返回 a Task,则返回 a Task。如果您实际上没有做任何异步操作,那么您可以返回Task.CompletedTask.

例如:

public Task AddResult(ResultDto result) {
    ...
    return Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)

如果必须返回值 ( Task<T>),则可以使用Task.FromResult().

指定方法应返回 a 的接口Task只是使该方法成为可能的一种方式async。这并不意味着它必须。