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();
}
}
完了コールバックが呼び出されていない理由の質問はありますか?
ありがとうございます。
は、私はシンプルなスレッドを使用する可能性がありますか? – IamStalker
@IamStalker、TPLをお勧めします。スレッドを手動で生成することは決して良い考えではありません。スレッドを生成するにはかなりのコストがかかる可能性があります。 TPLを使用することで、自動スレッドプーリング、タスクスケジューリング、使用可能なさまざまなCPUコアへの配布などの利点を活用できます。手動でスレッドを処理する場合は、数百行のコードを記述する必要があります。すべてのタスクのコンセプトに基づいて今後の.NET 4.5リリースはもちろんですが、 –
まず、説明について、ありがとう、私は簡単な質問を言うかもしれません、なぜ "IndexAsync"は、アクションの名前が重要ですか? – IamStalker