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(...));
}