Я новичок в MVC, поэтому мое мышление может быть совершенно неверным, но я хотел бы достичь, когда я вызываю действие в контроллере, как только он возвращает результат, будет вызван другой метод.
В настоящее время мой код работает следующим образом:
[HttpGet("/api/compile/{*path}")]
public IActionResult Compile(string path)
{
this.Queue.QueueBackgroundWorkItem(async token =>
{
await cp.Compile()
.ContinueWith((compilation) =>
Console.WriteLine(compilation.Result), token);
});
return new ContentResult
{
Content = "<div>Compilation requested...</div>",
ContentType = "text/html"
};
}
Он работает, как и ожидалось, фоновое задание было поставлено в очередь и будет возвращен результат содержимого.
Моя проблема в том, чтоесли я проверяю журнал консоли, конечно, по разумной причине, фоновое задание начинает входить в консоль раньше, чем будет возвращен контент-результат, так что я вижу:
backgroundjob log...1
backgroundjob log...2
[compilation.Result]
backgroundjob log...3
backgroundjob log...4
...
Но я бы хотелдостичь, что фоновое задание будет поставлено в очередь строго после возврата результата.
[compilation.Result]
backgroundjob log...1
backgroundjob log...2
backgroundjob log...3
backgroundjob log...4
...
Может быть, я могу добавить Thread.Sleep
в анонимный метод фонового задания, но, конечно, это не согласованно и хорошологический путь, но в настоящее время я не знаю, как я могу решить эту проблему.
Спасибо за вашу помощь!