【问题标题】:Deadlock Windows Phone 8 - UI Thread死锁 Windows Phone 8 - UI 线程
【发布时间】:2015-04-13 18:47:42
【问题描述】:

我的 UI 线程上有两个进程正在运行。 但是,当我使用 BeginGetStream 功能运行第一次时,它进入循环并等待其执行并在您准备好时返回结果,但在第二次运行中,通过 BeginGetResponse 功能,这个“死”在那里并且程序确实不继续,也不返回我想要的值。在这些过程中使用 IasynResult。

我试过了:

  • 转换为任务(Task.Run)

  • 为进程分配一个新线程(Thread x = new Thread())

  • 设置参数ConfigureAwait(ConfigureAwait( continueOnCapturedContext: false), ConfigureAwait (false));

  • 转换为 asyncronos 方法并应用“等待”

  • 使用 AutoResetEvent 等待进程完成,不要继续。

  • 放置线程休眠(Thread.Sleep)

  • Thread.Start、Thread.Join 的使用

一些代码示例:

第一次请求:

    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
    {
    }

...我不知道还能尝试什么... 有人可以帮助我。

谢谢。

【问题讨论】:

  • 您能否提供一些代码来重现该问题?光看描述很难理解
  • 你好,当然。我现在编辑。谢谢

标签: c# windows-phone-8 asynchronous deadlock ui-thread


【解决方案1】:

任何 HttpWebRequest 都需要一个空闲的 UI 线程来完成请求,但是您通过调用 Task.WaitAny() 来阻塞 UI 线程。

您绝不能阻塞 UI 线程,尤其是等待 Web 请求的结果!

【讨论】:

  • 好吧。是的。但我需要,对第一个请求的响应才能进行第二个请求。但是,我需要第二个请求的答案才能继续该程序。我删除了 Task.WaitAny ();但还是不行。
猜你喜欢
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多