WebRequest BeginGetResponse / EndGetResponse lança exceção ao usar Task.FromAsync

Eu tento sincronizar a operação POST com um serviço da Web REST usando o WebRequest.

Então, pelo que eu já sei, eu preciso usar oTask.Factory.FromAsync<T>(BeginXyz, EndXyz, null), parece que está trabalhando para oGetRequestStream par métodos, desde que eu não recebo nenhuma exceção e o byte [] é preenchido com valores.

Stream requestStream = await Task.Factory.FromAsync<Stream>(
                        request.BeginGetRequestStream, request.EndGetRequestStream, null);
byte[] postBytes = Encoding.UTF8.GetBytes(requestData);
await requestStream.WriteAsync(postBytes, 0, postBytes.Length);

Tudo bem, o código acima está funcionando, e a próxima parte lançando a exceção.

WebResponse webResponse = await Task.Factory.FromAsync<WebResponse>(
                        request.BeginGetResponse, request.EndGetResponse, null);

A exceção eu recebo a cada pedido.

System.NotSupportedException: método especificado não é suportado.

StackTrace:

Em System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, estado de objeto) em System.Net.Browser.ClientHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) em System.Func`2.Invoke (T arg) em System.Threading.Tasks. TaskFactory`1.FromAsyncCoreLogic (IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 prometido, Boolean requiresSynchronization) --- Fim do rastreamento de pilha do local anterior onde a exceção foi lançada --- em System.Runtime.CompilerServices .TaskAwaiter.ThrowForNonSuccess (Task task) em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) em System.Runtime.CompilerServices.TaskAwaiter`1.GetResult () em Gtas.Core.ServiceRepository.d__8.MoveNext ()

InnerException StackTrace: at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) em System.Net.Browser.ClientHttpWebRequest. <> C__DisplayClasse.b__d (Object sendState) em System.Net.Browser.AsyncHelper. <> C__DisplayClass1.b__0 ( Objeto sendState)

Um código completo para executar o pedido deve ser assim:

Stream requestStream = await Task.Factory.FromAsync<Stream>(
                        request.BeginGetRequestStream, request.EndGetRequestStream, null);
byte[] postBytes = Encoding.UTF8.GetBytes(requestData);
await requestStream.WriteAsync(postBytes, 0, postBytes.Length);


WebResponse webResponse = await Task.Factory.FromAsync<WebResponse>(
                        request.BeginGetResponse, request.EndGetResponse, null);
Stream streamResponse = webResponse.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = await streamRead.ReadToEndAsync();
// ... Do something with the result data

Eu não entendo muito bem qual é o erro.

Eu tentei várias implementações do stackoverflow e algumas postagens do MSDN. Nada parece funcionar.

Usando callbacks funcionando bem. Mas é bom saber por que não consigo fazer funcionar.

Alguma idéia de como fazer isso?

questionAnswers(2)

yourAnswerToTheQuestion