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构造,这将使控制器代码更干净。