Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步方法中同步代码的首选方式_C#_Asynchronous_Synchronous - Fatal编程技术网

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

C# 异步方法中同步代码的首选方式,c#,asynchronous,synchronous,C#,Asynchronous,Synchronous,我有一个简单的问题,但我认为有多种答案,但是否有以下方面的好/坏做法 我正在为给定的接口方法进行实现: Task<Model> GetDataAsync(CancellationToken token); 任务GetDataAsync(CancellationToken令牌); 因此,在我的实现中,我得到了以下签名: public async Task<Model> GetDataAsync(CancellationToken token) 公共异步任务GetDat

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

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

Task<Model> GetDataAsync(CancellationToken token);
任务GetDataAsync(CancellationToken令牌); 因此,在我的实现中,我得到了以下签名:

public async Task<Model> GetDataAsync(CancellationToken token)
公共异步任务GetDataAsync(CancellationToken令牌) 但是,此实现缺少任何异步调用; 只是一个普通的:
返回x.firstOrDefault…

所以我得到了下一个问题;这里需要一些建议;
我是否应该执行
等待任务。运行(…)这样我仍然可以实现给定的接口(顺便说一句,我需要),或者有更好的方法吗?还有什么好处。

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

公共任务GetDataAsync(CancellationToken令牌) { 返回Task.FromResult(x.FirstOrDefault(…); }

别忘了从方法签名中删除
async
,我会返回
任务。从结果(…)
,让它在另一个线程中运行并不意味着它在IMO中是异步的。@orhtej2说的,+从impl中删除async关键字<代码>等待任务。运行将只是一个额外的无用上下文switch@orhtej2从技术上讲,这将使其异步化,但可能有些过头了。
public Task<Model> GetDataAsync(CancellationToken token)
{
    return Task.FromResult(x.FirstOrDefault(...));
}