Я не очень понимаю, как работают / работают асинхронные методы. Я создал WebRequest
, который отправляет данные на сервер. Он содержит гораздо больше кода, чем если бы я использовал обычные методы.
Я заметил, что во всех обратных вызовах я получаю запрос от result.AsyncState
. Также скажем просто, чтобы написать в поток запросов, мне нужно иметь 1 обратный вызов (reqCB
) ... Это так запутанно. Интересно, как они намечают деятельность в реальной жизни?
private void Button_Click(object sender, RoutedEventArgs e)
{
var req = (HttpWebRequest)WebRequest.Create("http://localhost/php/upload.php");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.BeginGetRequestStream(new AsyncCallback(ReqCB), req);
}
private void ReqCB(IAsyncResult result)
{
var req = (HttpWebRequest)result.AsyncState;
using (var reqStream = req.EndGetRequestStream(result)) {
var writer = new StreamWriter(reqStream);
writer.Write("foo=bar&baz=12");
writer.Flush();
}
req.BeginGetResponse(new AsyncCallback(ResCB), req);
}
private void ResCB(IAsyncResult result)
{
var req = (HttpWebRequest)result.AsyncState;
var res = req.EndGetResponse(result);
using (var resStream = res.GetResponseStream()) {
var reader = new StreamReader(resStream);
resStream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(ReadCB), req);
_dispatcher.Invoke(new Action(delegate
{
txt1.Text = res.ContentLength.ToString();
}));
}
}