2009-11-22 24 views
0

我想从asp.net mvc期货使用异步,使用我自己的异步委托。还没有想出如何使其工作。下面的代码:与自定义代理MVC期货异步

public delegate String GetString(); 
    public String getHello() { return "Hello"; } 

    public IAsyncResult BeginHello(AsyncCallback cb, Object state) 
    { 
     GetString dlgt = getHello; 
     return dlgt.BeginInvoke(cb, state); 
    } 

    public ActionResult EndHello(IAsyncResult asyncResult) 
    { 
     return View(); 
    } 

在EndHello,asyncResult.IsCompleted =真,但asyncResult.AsyncState == NULL。我希望有AsyncState ==“你好”。

我错过了什么?

此外,这样安排它有意义吗?或者这是否导致它使用相同的线程池呢?基本上我的想法是将数据读取器放入我的异步函数中,认为我可以遍历读取器填充一组对象,并在完成时才返回。使用BeginExecuteReader并在主线程上填充对象会更好吗?

编辑:任何人以后阅读这,实际上是这样做的错误方式,并不会帮助你。 BeginExecuteReader是要走的路。

回答

0

在AsyncState中不会出现Hello。

当您执行EndInvoke()时将返回Hello。

例如 下面是你应该使用的代码:

public String EndHello(IAsyncResult asyncResult)  
{   
    GetString getStringDel = (asyncResult as AsyncResult).AsyncDelegate as GetString; 
    return getStringDel.EndInvoke(asyncResult); 
} 

你可以参考:

MSDN链接Calling Synchronous Methods Asynchronously

SO回答What is AsyncCallback?

+0

谢谢!现在我只需要用wcat做一些测试,看看这是否是一个好主意:) – DennisP