【发布时间】:2012-07-18 17:01:09
【问题描述】:
我在控制器中使用异步和等待。
以下代码运行良好
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(CompetitionViewModel viewModel)
{
if (ModelState.IsValid)
{
User user = null;
using (var facebookClient = new FacebookClient(viewModel.AccessToken))
{
var facebookUser = await facebookClient.Me();
user = entityStorage.GetUser(facebookUser);
FormsAuthentication.SetAuthCookie(user.FacebookId, true);
}
但是,如果我尝试在扩展方法中执行相同的代码,则等待永远不会完成。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(CompetitionViewModel viewModel)
{
if (ModelState.IsValid)
{
var user = entityStorage.GetCurrentUser(viewModel.AccessToken).Result;
和
public static class Helpers
{
public async static Task<User> GetCurrentUser(this IEntityStorage entityStorage, string accessToken)
{
User user = null;
using (var facebookClient = new FacebookClient(accessToken))
{
var facebookUser = await facebookClient.Me(); //STUCK HERE!!
user = entityStorage.GetUser(facebookUser);
FormsAuthentication.SetAuthCookie(user.FacebookId, true);
}
return user;
}
我正在使用 MVC4,并根据其他线程的建议在我的 web.config 中设置了 <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />。
谁能告诉我这是为什么以及如何让它发挥作用?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-3 asynchronous