NewbieQ:想知道C#异步/等待服务器端异步最佳实践
我有现在的时间过长,完成导致超时错误的服务器端AJAX请求处理。
处理程序调用一个方法:
public bool Run(Guid jobId) // returns true if successful in running jobId
运行作业交替IO那么势必CPU绑定操作的顺序,在重要的情况下。
理想情况下,我希望能够启动运行,然后不时地查询运行状态,然后得到结果(运行返回的布尔值)。
当编写服务器端代码来执行此操作时,最佳做法是什么?
我可以像这样写一个包装吗?
public async Task<bool> RunAsync(Guid jobId) {...}
如果是这样,那怎么称为非异步运行?
或者我需要做一个完整的重新编写的运行方法?最终,我从ajax请求处理程序调用此方法,所以我需要返回作业结果,或者我可以更改请求,然后启动作业,然后不时查询具有{bool resultReady,布尔?结果}或者像这样的结构。
如果您有多个可以并行运行的进程,async/await会很有帮助。如果这是一个正在运行并超时的单个进程,那么异步/等待将不会对您有所帮助。听起来更像是你应该有另一个进程,比如控制台应用程序,它接收到一个通知来开始这项工作。控制台应用程序不会像Web请求那样超时,但您必须轮询结果。或者,您可以考虑增加IIS/ASP.NET超时之前的时间.https://stackoverflow.com/questions/2414441/how-to-increase-request-timeout-in-iis。 – ps2goat
了解,但是这是运行在一个Web服务上,其他用户有其他事情要做,甚至要求这个任务的用户可能希望在等待结果时做其他事情。我真正担心的是,Web服务本身正在等待任务完成为同步任务。 –
@ ps2goat这是不正确的。 await对管理异步操作很有用。这些操作是否并行工作并不重要。 – Servy