服务器端异步最佳实践

时间:2017-09-25 16:07:09

标签: c# iis async-await

NewbieQ:想知道C#async / await

我有一个服务器端的ajax请求处理程序,现在需要很长时间才能完成导致超时错误。

处理程序调用方法:

public bool Run(Guid jobId) // returns true if successful in running jobId

作业运行一系列操作,这些操作交替地进行IO绑定,然后绑定CPU,以防万一。

理想情况下,我希望能够启动Run,然后不时查询运行状态,然后获得结果(Run返回的bool)。

编写服务器端代码时,最佳做法是什么?

我可以像这样写一个包装器吗?

public async Task<bool> RunAsync(Guid jobId) {...}

如果是这样,那怎么调用非异步Run?

或者我是否需要完全重写Run方法?最后,我从一个ajax请求处理程序调用它,所以我需要返回作业结果,或者,我可以更改请求,所以我启动作业然后不时查询具有{bool的结果结果准备,布尔?结果}或类似的结构。

2 个答案:

答案 0 :(得分:1)

你真正想要的不是一个可以用简单的单一方法完成的事情。您真的想要一个排队系统,您可以在其中检查队列中给定消息的状态。你基本上有一个方法可以将某些内容放入队列(例如MSMQ),另一种方法可以返回给定jobId的状态。

答案 1 :(得分:1)

您可以查看hangfire或signalR,通过事件处理程序通知客户端可能会发生长时间运行的进程。