我在C#中有以下异步代码:
public async Task GetPhotos(List<int> photoIds)
{
List<Photos> photos = new List<Photos>();
if (photoIds != null)
{
foreach (int photoId in photoIds)
{
Photo photo = await ImageRepository.GetAsync(photoId);
if (photo != null)
photos.Add(photo);
}
}
return photos;
}
在return语句中,我收到以下错误消息:
由于GetPhotos(List photoIds)是一个返回&#39; Task&#39;的异步方法,因此返回关键字后面不能跟一个对象表达式。您打算返回&#39;任务&#39;
如何解决此错误?
答案 0 :(得分:4)
异步方法返回Task<T1,T2,T3...>
,显示它是否完整,并允许调用者使用.Result
或async
来检索返回值。
如果没有返回值,则异步方法返回Task
。它,它完成后什么都不返回。
您的方法定义为返回Task
,这意味着它在完成时不返回任何内容,但在方法结束时返回List<Photo>
。因此,正确的返回类型为Task<List<Photo>>
。
您可能希望阅读this post。
此外,您的示例代码中有拼写错误:List<Photos>
- &gt; List<Photo>
。
答案 1 :(得分:4)
更改您的返回类型,例如Task<List<photos>>
public async Task<List<photos>> GetList()
{
List<Photos> photos = new List<Photos>();
if (photoIds != null)
{
foreach (int photoId in photoIds)
{
Photo photo = await ImageRepository.GetAsync(photoId);
if (photo != null)
photos.Add(photo);
}
}
return photos;
}
致电
var list = await GetList()
答案 2 :(得分:0)
制作方法Task<List<Photos>>
的返回类型,而不是Task
。致电GetPhotos
时,请使用
var photos = await GetPhotos
照片的类型为List<Photos>
。 (await
关键字实际上从List<Photos>
中提取Task
对象。)