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

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

以上是关于异步方法中同步代码的首选方式的主要内容,如果未能解决你的问题,请参考以下文章

一个例子看懂异步代码执行效率

AJAX中同步和异步的区别和使用场景

ajax的同步与异步

一文说通C#中的异步编程

ajax中的async属性值之同步和异步及同步和异步区别

[工作积累] UE4 并行渲染的同步 - Sync between FParallelCommandListSet & FRHICommandListImmediate calls(代码片段