C# 异步控制器行为
C# 异步控制器行为,c#,.net,asp.net-mvc,asp.net-mvc-3,C#,.net,Asp.net Mvc,Asp.net Mvc 3,AsyncManager.Parameters[“headlines”]=value正在分配标题值。但是当调用NewsCompleted方法时,headline将变为null public void NewsAsync(string city) { AsyncManager.OutstandingOperations.Increment(); NewsService newsService = new NewsService(); news
AsyncManager.Parameters[“headlines”]=value代码>正在分配标题值。但是当调用NewsCompleted
方法时,headline
将变为null
public void NewsAsync(string city)
{
AsyncManager.OutstandingOperations.Increment();
NewsService newsService = new NewsService();
newsService.GetHeadlinesCompleted += (value) =>
{
AsyncManager.Parameters["headlines"] = value;
AsyncManager.OutstandingOperations.Decrement();
};
newsService.GetHeadlinesAsync(city);
}
public ActionResult NewsCompleted(string[] headlines)
{
return View("News", new ViewStringModel
{
NewsHeadlines = headlines
});
}
1.)我如何调试它
2.)而且,当未完成操作计数变为0时,框架通过从线程池请求新线程来调用我的actionCompleted方法。当调用这个actionCompleted方法时,我查看了调用堆栈,不知道后面到底发生了什么。我的意思是框架如何知道它应该使用AsyncManager
中的这个参数调用这个特定的actionCompleted方法
谢谢你的帮助。试试这些调整
public void NewsAsync(string city)
{
AsyncManager.OutstandingOperations.Increment();
NewsService newsService = new NewsService();
newsService.GetHeadlinesCompleted += (sender, args) =>
{
AsyncManager.Parameters["headlines"] = args.Result;
AsyncManager.OutstandingOperations.Decrement();
};
newsService.GetHeadlinesAsync(city);
}
public ActionResult NewsCompleted(object headlines)
{
return View("News", new ViewStringModel
{
NewsHeadlines = (string[])headlines
});
}
试试这些调整
public void NewsAsync(string city)
{
AsyncManager.OutstandingOperations.Increment();
NewsService newsService = new NewsService();
newsService.GetHeadlinesCompleted += (sender, args) =>
{
AsyncManager.Parameters["headlines"] = args.Result;
AsyncManager.OutstandingOperations.Decrement();
};
newsService.GetHeadlinesAsync(city);
}
public ActionResult NewsCompleted(object headlines)
{
return View("News", new ViewStringModel
{
NewsHeadlines = (string[])headlines
});
}
这对我来说很好。但我为什么要将字符串[]更改为对象以使其工作呢?AsyncManager.Parameters是一个IDictionary。当您将项添加到此中时,它将作为传递的字符串键的对象添加。如果您使用的是mvc 4(framework 4.5),则可以使用新的async await构造,这将使控制器代码更干净。对我来说,它工作得很好。但我为什么要将字符串[]更改为对象以使其工作呢?AsyncManager.Parameters是一个IDictionary。如果您使用MVC4(framework 4.5),您可以使用新的async await构造,这将使控制器代码更干净。