Csharp/C#教程:等待Task.CompletedTask什么?分享


等待Task.CompletedTask什么?

我使用在Build2017中引入的Windows Template Studio创建了UWP应用程序。

下面的类是它生成的代码的一部分。

public class SampleModelService { public async Task<IEnumerable> GetDataAsync() { await Task.CompletedTask; // <-- what is this for? var data = new List(); data.Add(new SampleModel { Title = "Lorem ipsum dolor sit 1", Description = "Lorem ipsum dolor sit amet", Symbol = Symbol.Globe }); data.Add(new SampleModel { Title = "Lorem ipsum dolor sit 2", Description = "Lorem ipsum dolor sit amet", Symbol = Symbol.MusicInfo }); return data; } } 

我的问题是, await Task.CompletedTask;的目的和原因是await Task.CompletedTask; 代码在这里? 它实际上没有Task结果接收器。

可能只是为了让以后的阶段更容易实现异步代码调用而不必更改签名,从而防止必须重构调用代码。

另一个选择是从方法签名和该行删除async关键字

 return Task.FromResult>(data); 

当您需要返回由于接口而等待的任务时,您会看到此构造,例如,当实现没有异步工作时。

但是,在这种情况下,由于它是一个模板,他们希望人们用await FetchDataFromDatabaseAsync();类的东西替换await Task.Completed await FetchDataFromDatabaseAsync(); 。 由于async关键字已经存在,因此可以最大限度地减少实现自己的异步调用所需的更改。

无论如何,没有这个等待构造你可以这样做:

 public class SampleModelService { public Task> GetDataAsync() { var data = new List(); data.Add(new SampleModel { Title = "Lorem ipsum dolor sit 1", Description = "Lorem ipsum dolor sit amet", Symbol = Symbol.Globe }); data.Add(new SampleModel { Title = "Lorem ipsum dolor sit 2", Description = "Lorem ipsum dolor sit amet", Symbol = Symbol.MusicInfo }); return Task.FromResult>(data); } } 

如果根本不需要返回任务(您没有任何异步代码),那么只需将其完全删除即可。 (但是你必须重构调用这个方法的代码)

回顾一下这段代码我怀疑有人会在开发过程的后期调用异步方法,并且已经预料到通过指定此方法返回一个Task

上述就是C#学习教程:等待Task.CompletedTask什么?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/983530.html

(0)
上一篇 2021年12月19日
下一篇 2021年12月19日

精彩推荐