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

时间:2014-04-11 20:45:37

标签: asp.net asp.net-membership async-await c#-5.0

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

public override bool ValidateUser(string username, string password)

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

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

在这种情况下,如何调用我的两个任务并让它们在后台线程上运行?我知道我可以使用Task.Result,但我的理解是这将是一个同步调用,并且不满意。我不确定使用Task.Result获得的收益,因为我的意图是后台线程我的两个WCF服务方法调用。

1 个答案:

答案 0 :(得分:0)

嗯,你当然可以在会员提供者中异步调用任务,你只能不能异步调用ValidateUser。

旧的Membership API是在Async存在且很不兼容之前创建的。你可以用异步方法包装它。这是关于它的博客文章。

http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx

要点是这样的(改为用于ValidateUser)

public Task SleepAsync(int millisecondsTimeout) 
{ 
    return Task.Run(() => Sleep(millisecondsTimeout)); 
}
相关问题