我正在使用VS代碼並遵循ASP.NET Core/EF Core教程,並承認我不太清楚關於異步,等待和任務如何執行(當然,我知道前兩個,但不是第三個)。我正在首次實現一個存儲庫,並且要使用UnitofWork類和接口。這裏是的UnitOfWork類:如何解決:異步方法的返回類型必須爲空,任務或任務<T> [AppName]
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();
}
}
}
除了通過VS-代碼智能感知所示,當我將鼠標懸停在CompleteAsync動作名稱的主題行錯誤,我得到這個:
'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>();
}
這真的很奇怪,我沒有看到你的代碼有什麼問題。也許這是VS Code的一個錯誤。您是否嘗試在您的項目所在的文件夾中運行'dotnet build'來查看是否收到任何錯誤消息?順便說一下,在使用EF時編寫工作單元並不是很有用,DataContext已經是一個UnitOfWork實現。如果你想讓DataContext遠離你的控制器,你應該編寫一個服務。 – Gimly
是的。 => '構建失敗。 持久\ UnitOfWork.cs(14,23):錯誤CS1983:方法 必須是void一個異步的返回類型,任務或任務 [C:\用戶\ .. \ Vega.csproj] 0警告(S ) 1錯誤' –
PakiPat
還恢復了項目,並重新啓動VS代碼。 – PakiPat