【问题标题】:Error: return keyword must not be followed by an object expression in c# async code错误:c#异步代码中的return关键字后面不能跟对象表达式
【发布时间】:2014-04-18 04:25:49
【问题描述】:

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

在返回语句中,我收到以下错误消息:

由于 GetPhotos(List photoIds) 是一个返回 'Task' 的异步方法,因此 return 关键字后面不能跟对象表达式。您是否打算返回“任务”?

如何解决这个错误??

【问题讨论】:

    标签: c# asynchronous async-await task task-parallel-library


    【解决方案1】:

    像这样更改您的返回类型Task&lt;List&lt;photos&gt;&gt;

     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】:

      异步方法返回一个Task&lt;T1,T2,T3...&gt;,显示它是否完成并允许调用者使用.Resultasync 来检索返回值。

      如果没有返回值,异步方法返回Task。它完成后什么也不返回。

      你的方法被定义为返回一个Task,这意味着它在完成时什么也不返回,但在你的方法结束时你返回一个List&lt;Photo&gt;。因此,正确的返回类型应该是Task&lt;List&lt;Photo&gt;&gt;

      您不妨阅读this post

      另外,您的示例代码中有错字:List&lt;Photos&gt; -> List&lt;Photo&gt;

      【讨论】:

        【解决方案3】:

        将方法的返回类型设为Task&lt;List&lt;Photos&gt;&gt; 而不是Task。当您致电GetPhotos 时,请使用

        var photos = await GetPhotos
        

        照片的类型为List&lt;Photos&gt;。 (await 关键字本质上是从Task 中提取List&lt;Photos&gt; 对象。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-03
          • 2020-02-10
          • 2016-09-26
          • 2012-07-22
          • 1970-01-01
          • 2017-08-12
          相关资源
          最近更新 更多