错误:返回关键字后面不能跟c #async code中的对象表达式

时间:2014-04-18 04:25:50

标签: c#

我在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;

如何解决此错误?

3 个答案:

答案 0 :(得分:4)

异步方法返回Task<T1,T2,T3...>,显示它是否完整,并允许调用者使用.Resultasync来检索返回值。

如果没有返回值,则异步方法返回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对象。)