Ошибка метода "Не могу ждать" 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".
Спасибо за вашу помощь.
Ответы
Ответ 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
, на которую вы ссылаетесь.