我正在尝试使用我自己的异步委托从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是要走的路。
答案 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);
}
您可以参考: