MVC期货与自定义委托异步

时间:2009-11-22 05:02:02

标签: asp.net-mvc asynchronous

我正在尝试使用我自己的异步委托从asp.net 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 = True,但是asyncResult.AsyncState == null。我希望AsyncState ==“Hello”。

我错过了什么?

此外,以这种方式安排它是否有意义?或者这是否会导致它使用相同的线程池?基本上我的想法是在我的异步函数中放置一个datareader,认为我可以遍历读者填充对象集合,只有在完成后才返回。是否更好地使用BeginExecuteReader并填充主线程上的对象?

编辑:对于之后阅读此内容的人来说,实际上这是错误的做法,根本不会帮助你。 BeginExecuteReader是要走的路。

1 个答案:

答案 0 :(得分:0)

你不会在AsyncState中获得Hello。

执行EndInvoke()时将返回Hello。

e.g。 这是你应该使用的代码:

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

您可以参考:

MSDN链接Calling Synchronous Methods Asynchronously

回答What is AsyncCallback?