我是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"
};
}
工作正常,后台作业已入队,内容结果将返回。
我的问题是,如果我出于合理的原因检查控制台日志,则后台作业会在返回contentresult之前开始在控制台中进行日志记录,所以我看到的是
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
,但是这当然不是一致的逻辑方法,但目前我不知道该如何解决。
谢谢您的帮助!