异步方法中同步代码的首选方式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步方法中同步代码的首选方式相关的知识,希望对你有一定的参考价值。
我有一个简单的问题,但我认为有多个答案,但是有关于以下内容的好/坏做法;
我正在为给定的接口方法实现:
Task<Model> GetDataAsync(CancellationToken token);
所以在我的实现中,我得到以下签名;
public async Task<Model> GetDataAsync(CancellationToken token)
但是,这种实现缺少任何异步调用;只是一个常规:return x.firstOrDefault...
所以我得到了下一个问题;这是一些需要的建议;我应该做一个await Task.Run(...);
所以我仍然可以实现给定的接口(我需要顺便说一句),还是有更好的方法?有什么好处。
答案
您可以从给定结果返回已完成的任务,而无需调用await / Task.Run(考虑到您真的不想从另一个线程运行它)
public Task<Model> GetDataAsync(CancellationToken token)
{
return Task.FromResult(x.FirstOrDefault(...));
}
并且不要忘记从方法签名中删除async
以上是关于异步方法中同步代码的首选方式的主要内容,如果未能解决你的问题,请参考以下文章
[工作积累] UE4 并行渲染的同步 - Sync between FParallelCommandListSet & FRHICommandListImmediate calls(代码片段