首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换为“任务”返回委托的异步lambda表达式不能返回值

转换为“任务”返回委托的异步lambda表达式不能返回值
EN

Stack Overflow用户
提问于 2017-09-08 22:48:36
回答 1查看 8.7K关注 0票数 6

在ASP.NET核心应用程序(Startup.csConfigure方法)中有以下内容:

我刚添加了async关键字,因为我需要await关键字.现在,我得到了以下信息:

错误CS8031异步lambda表达式转换为“Task”返回委托不能返回值。你打算返回'Task<T>‘吗?

代码语言:javascript
复制
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签名

代码语言:javascript
复制
namespace Microsoft.AspNetCore.Authentication
{
    public class RemoteAuthenticationEvents : IRemoteAuthenticationEvents
    {
        public Func<TicketReceivedContext, Task> OnTicketReceived { get; set; }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-08 23:12:52

错误消息实际上是不言自明的:

转换为'Task'返回委托的异步lambda表达式不能返回值。你打算回'Task<T>'吗?

因此,您有一个异步lambda表达式,它应该返回一个Task-not,为任何T返回一个Task<T>

但是,当您执行return 0时,您将返回一个int,因此异步方法的返回类型是Task<int>,而不是Task。编译器希望您在那里做的是不返回任何值。

代码语言:javascript
复制
OnTicketReceived = async context =>
{
    await Task.Delay(100);
    return;
}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46125437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档