Здравствуйте я пытаюсь реализовать 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
@IamStalker, я бы рекомендовал TPL. Врожденные нерестовые нити никогда не являются хорошей идеей. Было бы довольно дорого порождать поток. Используя TPL, вы получите лучшее преимущество в таких областях, как автоматическое объединение потоков, планирование задач и распределение по различным доступным ядрам процессора ... что вам нужно написать сотни строк кода для достижения, если вы вручную работаете с потоками. Не говоря уже о предстоящей версии .NET 4.5, которая основана на концепции задач. –
спасибо вам в первую очередь, об этом объяснении, во-вторых, я могу сказать простой вопрос, «почему IndexAsync» имеет значение, какое имя Действие? – IamStalker