[英]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.