Нужна помощь в понимании асинхронных методов C # (HttpWebRequest) - PullRequest
0 голосов
/ 14 октября 2010

Я не очень понимаю, как работают / работают асинхронные методы. Я создал 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();
        }));
    }
}

1 Ответ

2 голосов
/ 14 октября 2010

Это может помочь придумать список, который вы кому-то передали. Каждый шаг занимает много времени, поэтому они забывают, каков следующий шаг, прежде чем они будут сделаны. Итак, они сунули руку в карман, вытащили список и поняли, что делать дальше.

IAsyncResult имеет общее свойство AsyncState, поэтому он может использоваться многими различными типами механизмов обратного вызова. Вот почему вам нужно разыграть результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...