C# 5 비동기/대기 기능을 사용하여 SignalR 응용 프로그램을 만들려고하지만 코드가 실행될 때마다 System.InvalidOperationException이 발생합니다. 다음은 문제를 재현 할 수있는 가장 간단한 코드입니다.SignalR - 허브에서 비동기 작업을 수행하는 방법은 무엇입니까?
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)
은 자바 스크립트는 다음과 같습니다.
$.connection.hub.start().done(function() {
$('#google').click(function() {
var google = sample.server.getGoogle();
console.log(google);
});
});
내가 뭘 잘못 했니? 해결 방법이 있습니까? 나는 가능하다면 C#의 비동기/대기 패턴에 충실하기를 정말로 원한다.
메서드 이름 앞에 async 키워드를 추가하여 GetGoogle 메서드를 비동기 적으로 만들었습니까? –
예, 시도했지만 작동하지 않았습니다. 스티븐의 대답이 드디어 내 문제를 해결했습니다. –