代码之家  ›  专栏  ›  技术社区  ›  Mark Kadlec

从ASP.NET异步使用WCF调用,但不异步执行

  •  0
  • Mark Kadlec  · 技术社区  · 15 年前

    我已经实现了一些wcf代码,它从wcf调用中返回数据,它可以工作,但行为是同步的。

        IAsyncResult BeginGetAsyncData(object src, EventArgs args, AsyncCallback cb, object state)
        {
            _client = new ServiceReference1.Service1Client();
    
            return _client.BeginGetPermissionsByStaffID("xxx", cb, state);
        }
    
        void EndGetAsyncData(IAsyncResult ar)
        {
            //ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
            ServiceReference1.tblUser_Permission[] permissions = _client.EndGetPermissionsByStaffID(ar);
    
            System.Threading.Thread.Sleep(2000);
    
            dgResults.DataSource = permissions;
            dgResults.DataBind(); 
        }
    
    
        protected void Button1_Click(object sender, EventArgs e)
        {
            PageAsyncTask task = new PageAsyncTask(BeginGetAsyncData, EndGetAsyncData, null, null);
    
            Page.RegisterAsyncTask(task);
    
            txtOut.Text = "Waiting...";
        }
    

    我看到的是两秒钟的停顿,然后“等待”信息出现。我没有显式地生成一个新线程,但据我所知,当我将WCF服务定义为异步时,这是不必要的。

    任何帮助都将不胜感激!

    1 回复  |  直到 15 年前
        1
  •  1
  •   Justin Niessner    15 年前

    在页面生命周期中,pageAsyncTask对其他进程异步执行。

    在所有这些异步任务完成之前,实际的页面不会被传递到浏览器……这时用户将看到按钮文本的更改。

    推荐文章