【发布时间】:2018-02-17 21:48:57
【问题描述】:
我在 ASP.NET Core 应用程序中有以下内容(Startup.cs、Configure 方法):
我刚刚添加了async 关键字,因为我需要await 一个...
所以现在,我得到以下信息:
错误 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; }
【问题讨论】:
-
请不要删除您的问题,因为它已关闭并重新创建一个新的相同问题以摆脱接近投票和 cmets。 – 另外,我正要回答您的原始问题,但您删除了它……
-
OnTicketReceived期待什么委托类型? -
@MikeStrobel 我更新了 OP 来解释它
-
听起来
OnTicketReceived想要一个返回Task的委托,即没有结果的任务。我猜当您添加async时,您的lambda 的隐式返回类型变为async Task。这意味着您无法返回值,因此请将您的 lambda 视为返回void。只需完全删除您的退货声明即可。
标签: c# asp.net-core async-await