如何修复:异步方法的返回类型必须为void,任务或任务<t> [AppName]

时间:2017-05-18 18:41:00

标签: asp.net-mvc async-await repository-pattern

我正在使用VS Code并遵循ASP.NET Core / EF Core教程,并承认我不太清楚async,await和Task是如何做的(好吧,我知道前两个,但不是第三个) 。)我是第一次实现一个存储库,还有一个UnitofWork类和接口。这是UnitofWork类:

using System.Threading.Tasks;

namespace vega.Persistence
{
  public class UnitOfWork : IUnitOfWork
  {
    private readonly VegaDbContext context;

    public UnitOfWork(VegaDbContext context)
    {
      this.context = context;
    }

    public async Task CompleteAsync()
    {
      await context.SaveChangesAsync();
    }
  }
}

当我将鼠标悬停在CompleteAsync操作名称上时,除了VS-Code intellisense显示的主题行错误之外,我得到了这个:

'UnitOfWork.CompleteAsync()': not all code paths return a value [AppName]

其他可能相关的片段:

using System;
using System.Threading.Tasks;

namespace vega.Persistence
{
    public interface IUnitOfWork
    {
        Task CompleteAsync();
    }
}

在我的Startup.cs中:

public void ConfigureServices(IServiceCollection services)
{
    // Add Repository and UnitOfWork --scoped (instance persits for life of request),
    // not Transient or Singleton
    services.AddScoped<IVehicleRepository, VehicleRepository>();
    services.AddScoped<IUnitOfWork, UnitOfWork>();
}

1 个答案:

答案 0 :(得分:3)

您的项目中定义了另一个vega.Persistence.Task类型。只需添加命名空间以将System.Threading.Tasks.Task更正为方法的返回类型:

public async System.Threading.Tasks.Task CompleteAsync()
{
    await context.SaveChangesAsync();
}

在您的界面中也一样。