如何在asp.net成员资格提供程序ValidateUser方法中使用async await?

如何在asp.net成员资格提供程序ValidateUser方法中使用async await?,asp.net,asp.net-membership,async-await,c#-5.0,Asp.net,Asp.net Membership,Async Await,C# 5.0,我正在使用asp.net 4.5 web应用程序和asp.net成员资格。我实现了MembershipProvider接口,它有一个方法: public override bool ValidateUser(字符串用户名、字符串密码) 我的实现方法中的代码必须进行两次WCF服务调用,这可能会很昂贵。本着学习和使用异步的精神和愿望,我想让代码使用异步等待 我创建了两个需要调用WCF服务方法的任务。我不清楚的是如何正确使用“ValidateUser”方法中的async调用这些任务。我无法将此方法签名

我正在使用asp.net 4.5 web应用程序和asp.net成员资格。我实现了MembershipProvider接口,它有一个方法:

public override bool ValidateUser(字符串用户名、字符串密码)

我的实现方法中的代码必须进行两次WCF服务调用,这可能会很昂贵。本着学习和使用异步的精神和愿望,我想让代码使用异步等待

我创建了两个需要调用WCF服务方法的任务。我不清楚的是如何正确使用“ValidateUser”方法中的async调用这些任务。我无法将此方法签名更改为添加async,因为我必须将bool更改为Task,所以我只能使用async修饰符无法使用的方法签名


在这种情况下,我如何调用我的两个任务并让它们在后台线程上运行?我知道我可以使用Task.Result,但我的理解是,这将是一个同步调用,不受欢迎。我不确定使用Task.Result的好处,因为我的目的是后台线程化我的两个WCF服务方法调用。

当然,您可以在成员资格提供程序内异步调用任务,但不能异步调用ValidateUser

旧的成员资格API早在Async存在之前就创建了,因此不兼容。您可以将其包装为一个异步方法。这里有一篇关于它的博客

要点如下(更改为用于ValidateUser)


谢谢-我认为这个故事的寓意是让它保持同步,不要尝试将所有内容都异步。这篇博文的一般信息不是要做你推荐的事情吗?这对web应用程序尤其有害。为什么会有人编写这样的代码:
Task.Run(()=>Sleep(毫秒刺激))?@PauloMorgado-我没有对它做出任何价值判断,只是认为它是可以做到的。但是,是的,没有太多的指向它。除非设计时考虑到异步,否则任何你尝试的技巧都可能比保持同步更有价值。
public Task SleepAsync(int millisecondsTimeout) 
{ 
    return Task.Run(() => Sleep(millisecondsTimeout)); 
}