0
你好,我是想实现一个AsynController,AsyncController回调没有被调用,如何调用它?
这里是我的代码:
[NoCache]
public class GraphController : BaseAsyncController
{
private readonly IReportsRepository _reportsRepository;
private readonly ISqlQueryRepository _sqlQueryRepository;
//Background worker
private readonly BackgroundWorker _worker = new BackgroundWorker();
public GraphController(ISqlQueryRepository sqlQueryRepository, IReportsRepository reportsRepository)
{
_sqlQueryRepository = sqlQueryRepository;
_reportsRepository = reportsRepository;
}
public void Index()
{
AsyncManager.OutstandingOperations.Increment();
_worker.DoWork += (sender, args) =>
{
AsyncManager.Parameters["message"] = "hello world";
Thread.Sleep(3000);
};
_worker.RunWorkerCompleted += (sender, args) => AsyncManager.OutstandingOperations.Decrement();
//run the worker
_worker.RunWorkerAsync();
}
public ActionResult IndexCompleted(string message) //callback not being invoked
{
ViewData["message"] = message;
return View();
}
}
的是,为什么完成回调不被调用的问题?
在此先感谢。
为什么你建议TPL,可能我用一个简单的主题? – IamStalker 2012-03-14 07:55:50
@IamStalker,我推荐TPL。手动产卵线程永远不是一个好主意。产生一个线程可能相当昂贵。通过使用TPL,您将更好地利用诸如自动线程池,任务调度和分布在不同的可用CPU内核之类的东西......如果您手动使用线程,则应该编写数百行代码才能实现的目标。更不用说即将发布的.NET 4.5版本,它们都基于任务的概念。 – 2012-03-14 08:00:04
首先感谢你,关于解释,第二我有我可能会说简单的问题,“为什么IndexAsync”这是否重要的Action的名称? – IamStalker 2012-03-14 08:04:45