在ASP.NET核心应用程序(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;,但是错误信息并没有改变.
PS。OnTicketRecieved签名
namespace Microsoft.AspNetCore.Authentication
{
public class RemoteAuthenticationEvents : IRemoteAuthenticationEvents
{
public Func<TicketReceivedContext, Task> OnTicketReceived { get; set; }发布于 2017-09-08 23:12:52
错误消息实际上是不言自明的:
转换为
'Task'返回委托的异步lambda表达式不能返回值。你打算回'Task<T>'吗?
因此,您有一个异步lambda表达式,它应该返回一个Task-not,为任何T返回一个Task<T>。
但是,当您执行return 0时,您将返回一个int,因此异步方法的返回类型是Task<int>,而不是Task。编译器希望您在那里做的是不返回任何值。
OnTicketReceived = async context =>
{
await Task.Delay(100);
return;
}https://stackoverflow.com/questions/46125437
复制相似问题