Я пытаюсь создать приложение SignalR с использованием функций async/await С# 5, но всякий раз, когда выполняется код, он генерирует исключение System.InvalidOperationException. Вот простейший код для воспроизведения проблемы.
public class SampleHub : Hub
{
public Task<string> GetGoogle()
{
var http = new WebClient();
return http.DownloadStringTaskAsync("http://www.google.com");
}
}
Сведения об исключении:
Асинхронная операция не может быть запущена в это время. Асинхронные операции могут запускаться только в асинхронном обработчике или модуле или во время определенных событий в жизненном цикле страницы. Если это исключение произошло во время выполнения страницы, убедитесь, что страница отмечена <% @Page Async =\ "true \" % > .
Трассировка стека:
at System.Web.AspNetSynchronizationContext.OperationStarted()
at System.Net.WebClient.DownloadStringAsync(Uri address, Object userToken)
at System.Net.WebClient.DownloadStringTaskAsync(Uri address)
at System.Net.WebClient.DownloadStringTaskAsync(String address)
На стороне клиента Javascript выглядит следующим образом.
$.connection.hub.start().done(function () {
$('#google').click(function () {
var google = sample.server.getGoogle();
console.log(google);
});
});
Что я сделал неправильно? Есть ли обходные пути? Я действительно стараюсь придерживаться шаблонов async/await на С#, если возможно вообще.