异步方法中同步代码的首选方式是什么?

3

我有一个简单的问题,但我认为有多个答案,以下内容是否存在好坏实践?

我正在实现给定接口方法:

Task<Model> GetDataAsync(CancellationToken token);

所以,在我的实现中,我得到了以下签名:

public async Task<Model> GetDataAsync(CancellationToken token)

然而,这个实现缺乏任何异步调用;只有一个常规的:return x.firstOrDefault...

于是我遇到了下一个问题;需要一些建议;我应该使用 await Task.Run(...); 来实现我需要的接口吗?还是有更好的方法?有什么好处。


2
我会返回 Task.FromResult(...),在另一个线程中运行并不会使它异步。 - orhtej2
按照@orhtej2所说,从实现中删除async关键字。await Task.Run只会增加无用的上下文切换。 - Vladi Pavelka
@orhtej2 技术上讲,这会使它异步化,但可能有些过度。 - Filip Cordas
1个回答

5
您可以在不调用await / Task.Run的情况下返回给定结果的已完成任务(假设您真的不想从另一个线程运行它)。
public Task<Model> GetDataAsync(CancellationToken token)
{
    return Task.FromResult(x.FirstOrDefault(...));
}

不要忘记从方法签名中删除 async


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接