如何解决任务和返回类型
我对任务有疑问。我知道如果需要等待该方法,我们应该选择Task
,如果不需要该方法,则选择void
,如果我们要返回某个值,则选择Task<T>
。对?现在,我正在使用Task<T>
并接受从API返回的参数List<Article>
并返回return Task.CompletedTask;
。但是我不确定这是正确的。
async Task<Task> FillAnonymousArticles(List<Article> articles)
{
foreach (var article in articles)
{
var filename = string.Format(SharedConstants.ArticleImageUrl,SharedConstants.ApiBaseUri,article.Id);
var newCell = new ArticleDetailData()
{
Author = article.Author,BackgroundImage = filename,Id = article.Id,Subtitle = article.Description,Title = article.Name,};
var sec = article.Category;
if (sec == null)
{
newCell.Section = " ";
}
else
{
newCell.Section = article.Category;
}
}
return Task.CompletedTask;
}
解决方法
关于问题的第一部分: 如果您的方法执行I / O调用或长时间运行的CPU密集型计算并且您不希望在执行此操作时阻止调用方线程,则返回Task或Task。
您返回void或方法中的直接值不符合上述条件。
在第三种情况下,您声明了一个异步void方法,以防您的方法进行I / O调用或长时间运行CPU计算,但是您需要通过需要void返回类型的东西来调用它,例如在按钮中Winforms或WPF应用程序中的单击处理程序。
另一种情况是异步执行任务的方法,但调用方希望获得Task或Task的结果。在这种情况下,您将返回Task.CompletedTask或Task.FromResult(value)
您的代码示例中的方法未执行长时间的CPU密集型操作或I / O调用。无需将其定义为异步。您可以只使用一个无效的返回类型,或者如果调用者希望使用Task返回类型,则将返回类型设为Task并返回Task.CompletedTask而不使方法异步。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。