在我的ASP.NET Core应用程序(Startup.cs
,Configure
方法)中,我有以下内容:
我刚刚添加了async
关键字,因为我需要await
。 现在,我得到了以下错误:
Error CS8031 异步lambda表达式转换为返回'
Task
'的委托时无法返回值。 您是否打算返回'Task<T>
'?
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, ITableRepositories repository)
{
// ...
app.UseStaticFiles();
app.UseCookieAuthentication();
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
ClientId = Configuration["..."],
Authority = Configuration["..."],
CallbackPath = Configuration["..."],
Events = new OpenIdConnectEvents
{
OnAuthenticationFailed = context => { return Task.FromResult(0); },
OnRemoteSignOut = context => { return Task.FromResult(0); },
OnTicketReceived = async context =>
{
var user = (ClaimsIdentity)context.Ticket.Principal.Identity;
if (user.IsAuthenticated)
{
var firstName = user.FindFirst(ClaimTypes.GivenName).Value;
// ...
List<Connection> myList = new List<Connection>() { c };
var results = await repository.InsertOrMergeAsync(myList);
var myConnection = (results.First().Result as Connection);
}
return Task.FromResult(0); // <<< ERROR HERE ....... !!!
},
OnTokenValidated = context => { return Task.FromResult(0); },
OnUserInformationReceived = context => { return Task.FromResult(0); },
}
});
app.UseMvc(routes => { ... });
}
在这种情况下我应该返回什么?我尝试过return 0;
,但错误信息没有改变...
附注:OnTicketRecieved
的签名。
namespace Microsoft.AspNetCore.Authentication
{
public class RemoteAuthenticationEvents : IRemoteAuthenticationEvents
{
public Func<TicketReceivedContext, Task> OnTicketReceived { get; set; }
OnTicketReceived
想要一个返回Task
的委托,也就是一个没有结果的任务。我猜当你添加了async
后,你的 lambda 的隐式返回类型变成了async Task
。这意味着你不能返回一个值,所以把你的 lambda 当作返回void
来处理。只需完全删除你的返回语句即可。 - Mike Strobel