0
我正在使用異步並在控制器中等待。等待沒有完成擴展方法,但在控制器中工作
下面的代碼工作正常
[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" />
組按照其他線程建議。
任何人都可以告訴我爲什麼這是,我怎麼能得到它的工作?