c# - 在同一个 HttpWebRequest 中混合使用 Sync 和 Async 方法
问题描述
在他们的文档和示例中,微软表示不要混合对同步和异步方法的调用HttpWebRequest
(https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.begingetresponse?redirectedfrom=MSDN&view =net-5.0#remarks )
但是,在给出的示例中,他们调用request.BeginGetRequestStream
,并在回调中使用 完成获取流request.EndGetRequestStream
,然后用用户输入同步填充它,然后继续使用request.BeginGetResponse
。
可以直接调用request.GetRequestStream
,用另一个流的内容填充它CopyTo
,然后继续request.BeginGetResponse
吗?
例如,哪个更好:
选项1:
void SendRequest()
{
// here comes the creation of a request using WebRequest.CreateHttp()
// ...
request.Method = "POST";
request.BeginGetRequestStream(GetRequestStreamCallback, request);
}
private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
Stream postStream = request.EndGetRequestStream(asynchronousResult);
this.someBodyContentStream.CopyTo(postStream);
postStream.Close();
request.BeginGetResponse(GetResponseCallback, request);
}
或选项 2:
void SendRequest()
{
// here comes the creation of a request using WebRequest.CreateHttp()
// ...
request.Method = "POST";
Stream postStream = request.GetRequestStream();
this.someBodyContentStream.CopyTo(postStream);
request.BeginGetResponse(GetResponseCallback, request);
}
更新
是否有可能调用Begin...
带有回调和对象并返回 an 的方法IAsyncResult
将在同一个线程上调用回调,因此,如果处理不当,会在回调释放等待句柄的情况下导致挂起?
解决方案
推荐阅读
- macos - 请参阅原始粘贴数据 [MacOS]
- python - 如何将掩码纳入负似然损失 (torch.nn.functional.nll_loss)
- javascript - 猫头鹰旋转木马自由滑动移动
- django - Pinax 还在维护吗?
- excel - 编写一个 Excel 宏来查找和赋值,复制该值并粘贴到单元格中
- synchronization - 使用 rsync/rclone 进行增量数据传输
- javascript - 动态更新 react-native highchart
- python - 如何重定向到不同的站点,并使用 Django 传递身份验证凭据
- javascript - jQuery/Javascript 帮助:无法使用自动完成功能动态添加字段
- ios - iOS App Clip - openSettingsURLString / "app-settings:"