异步方法中同步代码的首选方式

时间:2018-07-04 19:56:10

标签: c# asynchronous synchronous

我有一个简单的问题,但我认为有多个答案,但是以下内容是否有好/坏做法?

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

Task<Model> GetDataAsync(CancellationToken token);

因此在我的实现中,我得到了以下签名;

public async Task<Model> GetDataAsync(CancellationToken token)

但是,此实现缺少任何异步调用; 只是常规的:return x.firstOrDefault...

所以我遇到了下一个问题;这里需要一些建议; 我应该做一个await Task.Run(...);还是可以实现给定的接口(我需要顺便说一句),还是有更好的方法?以及有什么好处。

1 个答案:

答案 0 :(得分:4)

您可以从给定的结果返回已完成的任务,而无需调用await / Task.Run(考虑到您确实不想从另一个线程运行它)

public Task<Model> GetDataAsync(CancellationToken token)
{
    return Task.FromResult(x.FirstOrDefault(...));
}

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