Подтвердить что ты не робот

Ошибка метода "Не могу ждать" System.Threading.Tasks.Task 'из свойств ожидания и асинхронизации

Я установил пакет NuGet Async для .NET Framework 4, Silverlight 4 и 5 и Windows Phone 7.5 и 8.

Version 1.0.16

Я использую Microsoft.NET 4.0, и я не могу выполнить обновление из-за ограничений пакета веб-хостинга. (К сожалению!)

Мой тестовый код: (Я делаю запрос Linq to SQL вместо Thread.Sleep)

public class Search
{
public async Task<List<Result>> GetResults(string SearchString)
{
await System.Threading.Tasks.Task.Factory.StartNew(() => Thread.Sleep(1000));
}
}

Моя ошибка:

Cannot await 'System.Threading.Tasks.Task'

http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx говорит об ошибке, но на самом деле это не ответ, поскольку я не использую VB, и я уже делаю то, что решение описывает.

[EDIT] Я получаю предупреждение:

Warning 4   The primary reference "Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" could not be resolved because it has an indirect dependency on the framework assembly "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.0". To resolve this problem, either remove the reference "Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" or retarget your application to a framework version which contains "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".

Спасибо за вашу помощь.

4b9b3361

Ответ 1

Какой кошмар! Я нашел проблему.

Microsoft.Bcl

В моем случае появляется сообщение о том, что Microsoft.Bcl и Microsoft.Bcl.Async находятся в конфликте. Я удалил Microsoft.Bcl и Microsoft.Bcl.Async со следующими командами:

uninstall-package Microsoft.Bcl.Async -force

то

uninstall-package Microsoft.Bcl -force

а затем снова установите:

install-package Microsoft.Bcl.Async

Теперь это работает. Я не могу поверить в это? Также не уверен, почему Microsoft.Bcl остался там в первую очередь. После удаления Microsoft.Bcl.Async он остается позади. Пока все работает нормально. Еще несколько тестов, которые нужно выполнить.

Если у других есть проблемы с пакетами NuGet, вы можете попробовать на свой страх и риск:

update-package -pre

Это приведет к откату пакетов, которые были обновлены. Вот как я нашел проблему.

[EDIT] Стоит отметить, что после дальнейшего тестирования Microsoft.Bcl не удаляется при удалении Microsoft.Bcl.Async. Microsoft.Bcl может быть обновлен отдельно, и появляется это обновление вне Microsoft.Bcl.Async может быть проблемой. Microsoft.Bcl устанавливается при установке Microsoft.Bcl.Async.

Надеюсь, это поможет другим!

Ответ 2

Измените конфигурацию следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-[version]" newVersion="[version]" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-[version]" newVersion="[version]" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Замена [версии] версией (например, 2.5.10.0) System.Runtime и System.Threading.Tasks, на которую вы ссылаетесь.