(можно использовать только с .NET 3.5 запас, так что никаких задач, не Реактивные Extensions)Ожидание метода IAsyncResult, что ждет на другом IAsyncResult (выстраивание)
У меня есть, что я думал, чтобы быть простой случай, но Я смущен этим.
Короткое этого является то, что я возвращаюсь IAsyncResult BeginGetRequestStream к вызывающему BeginMyOperation(), и я хочу, чтобы действительно отправить обратно IAsyncResult из BeginGetResponse, который вызывается, когда EndGetRequestStream называется.
Так что я задаюсь вопросом, как я
public IAsyncResult BeginMyOperation(...)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(requestUri);
webRequest.Method = "POST";
// This is the part, that puzzles me. I don't want to send this IAsyncResult back.
return webRequest.BeginGetRequestStream(this.UploadingStreamCallback, state);
}
// Only want this to be called when the EndGetResponse is ready.
public void EndMyOperation(IAsyncResult ar)
{
}
private IAsyncResult UploadingStreamCallback(IAsyncResult asyncResult)
{
using (var s = state.WebRequest.EndGetRequestStream(asyncResult))
{
using (var r = new BinaryReader(state.Request.RequestData))
{
byte[] uploadBuffer = new byte[UploadBufferSize];
int bytesRead;
do
{
bytesRead = r.Read(uploadBuffer, 0, UploadBufferSize);
if (bytesRead > 0)
{
s.Write(uploadBuffer, 0, bytesRead);
}
}
while (bytesRead > 0);
}
}
// I really want to return this IAsyncResult to the caller of BeginMyOperation
return state.WebRequest.BeginGetResponse(new AsyncCallback(state.Callback), state);
}
@JonSkeet Я уверен, что JonSkeet мог ответить на этот вопрос .. вздох. –