2013-07-17 3 views
1

Не знаете, почему это не возвращает мой взгляд после завершения задачи, и я могу найти много в Google о том, почему.Почему это возвращает System.Threading.Tasks.Task`1 [System.Web.Mvc.ActionResult]

public async Task<ActionResult> GetUserAsync() 
    { 

     var value = Task.Factory.StartNew(() => _userService.GetUser("ausername")); 

     await Task.WhenAll(value); 

     return View("GetUser"); 
    } 
+0

http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx – Lee

+0

Убедитесь, что вы нацеливаете .NET 4.5, а не .NET 4.0. –

+0

ответ

2

ли этот проект модернизировал от предыдущей версии? Убедитесь, что любые библиотеки, на которые вы ссылаетесь, не ссылаются на старую версию MVC в качестве зависимости. Чтобы устранить эту проблему точно я ...

Удалены следующие из моего web.config:

<dependentAssembly> 
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
    </dependentAssembly> 

Обеспечил targetFramework является .NET 4,5

<compilation debug="true" targetFramework="4.5"> 

И удалили ссылку на библиотеку Fluent Filters который был устаревшим решением для глобальных фильтров.

С этими изменениями я смог вернуть задачу с контроллера.

0

Он возвращает Задачу, которая после завершения содержит результат вычисления.

Это синтаксический сахар C#, и это может показаться странным, пока вы не привыкнете к нему. Если вы хотите просто получить результат без перехода на асинхронный вызов (сделать блокирующий вызов), вы можете написать var r = await GetUserAsync();, а r будет иметь тип ActionResult.

+0

Метод даже не выполняется, что является более серьезной проблемой. – DfwForSale

+0

Затем вы должны предоставить больше кода или сообщить об ошибке ... –

+0

Вставка всего кода из вызываемого метода будет несколько бессмысленной, учитывая тот факт, что это никогда даже не выполняется. – DfwForSale

18

Итак, после слишком много часов отладки и вытягивания того, что осталось от моих волос, я нашел преступника. Это был мой WindsorActionInvoker !! Изменение с ControllerActionInvoker в AsyncControllerActionInvoker устранило проблему, так как async Task не работал должным образом.

Надеюсь, это поможет кому-то.

public class WindsorActionInvoker : AsyncControllerActionInvoker 
{ 
    private readonly IKernel _kernel; 


    public WindsorActionInvoker(IKernel kernel) 
    { 
     _kernel = kernel; 
    } 

    protected override ActionExecutedContext InvokeActionMethodWithFilters(ControllerContext controllerContext, 
                      IList<IActionFilter> filters, 
                      ActionDescriptor actionDescriptor, 
                      IDictionary<string, object> parameters) 
    { 
     foreach (IActionFilter actionFilter in filters) 
     { 
      _kernel.InjectProperties(actionFilter); 
     } 
     return base.InvokeActionMethodWithFilters(controllerContext, filters, actionDescriptor, parameters); 
    } 
} 
+4

Ты спасатель! –

+0

Отличный улов на этом. Благодаря! –

+0

У меня было сочетание асинхронных и неасинхронных действий и в итоге пришлось перезаписать BeginInvokeActionMethodWithFilters в дополнение к InvokeActionMethodWithFilters, чтобы заставить инъекцию работать во всех действиях – Josh

1

У меня была точно такая же проблема, я использую рамки .NET 4.5, но MVC 3, по-видимому, MVC 3 не поддерживает .NET 4.5 и это вызывает ошибку, после обновления до MVC 4, я был в состоянии исправить ошибку. Я нашел пакет в NuGet под названием Upgrade MVC 3 To MVC 4, который сделал чудеса для обновления, однако у меня появились ошибки послесловия. Проблема после этого была линия

<appSettings> 
<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
<add key="webpages:Version" value="2.0.0.0" /> <-------- This line 
<add key="PreserveLoginUrl" value="true" /> 

в Web.config после его изменения, как указано в сообщении об ошибке брошенной

<add key="webpages:Version" value="1.0.0.0" /> 

все началось тор работает должным образом.

Я надеюсь, что это помогает кто-то, я провел 3 дня, пытаясь найти ответ самого

Смежные вопросы