簡體   English   中英

需要幫助來了解C#異步方法(HttpWebRequest)

[英]Need help understanding C# Async Methods (HttpWebRequest)

我不太了解異步方法的流程/工作原理。 我創建了一個將數據發布到服務器的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();
        }));
    }
}

考慮一下您交給某人的清單可能會有所幫助。 每個步驟都需要花費大量時間,因此他們在完成之前會忘記下一步是什么。 因此,他們伸手去拿錢,拿出清單,意識到下一步該做什么。

IAsyncResult具有常規的AsyncState屬性,因此可以被許多不同類型的回調安排使用。 這就是為什么您需要轉換結果的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM