我的UI线程上运行了两个进程。 但是,当我运行第一个,使用BeginGetStream功能时,它进入循环并等待它的执行并在你准备就绪时返回结果,但是在第二次运行中,通过BeginGetResponse功能,这个“死”在那里,程序做没有继续,并没有回报我想要的价值。在这些过程中使用IasynResult。
我试过了:
转换为任务(Task.Run)
为进程分配一个新线程(Thread x = new Thread())
设置参数ConfigureAwait(ConfigureAwait( continueOnCapturedContext:false),ConfigureAwait(false));
转换为asyncronos方法并应用“await”
使用AutoResetEvent等待进程完成,不要继续。
放置线程进入睡眠状态(Thread.Sleep)
一些代码示例:
第一次请求:
int number = 123;
1Request.Headers["Teste"] = string.Format("Teste{0}", number);
IAsyncResult AsyncronousResult= null;
try
{
await Task.Run(() => 1Request.BeginGetRequestStream(
(IAsyncResult result) =>
{
AsyncronousResult= result;
//handle.Set();
}, 1Request));
Task.WaitAny();
}
catch (Exception) { }
第二次请求:
HttpWebRequest 2request = (HttpWebRequest)AsyncronousResult.AsyncState;
IAsyncResult AsyncronousResult = null;
Try
{
await Task.Run(() => 2request.BeginGetResponse(
(IAsyncResult result) =>
{
AsyncronousResult = result;
}, 2request));
Task.WaitAny();
}
catch
{
}
......我不知道还有什么可以尝试...... 有人可以帮助我。
谢谢。
答案 0 :(得分:1)
任何HttpWebRequest都需要一个免费的UI线程来完成请求,但是你通过调用Task.WaitAny()来阻止UI线程。
您必须永远不要阻止UI线程,尤其是等待Web请求的结果!