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的结果结果准备,布尔?结果}或类似的结构。
答案 0 :(得分:1)
你真正想要的不是一个可以用简单的单一方法完成的事情。您真的想要一个排队系统,您可以在其中检查队列中给定消息的状态。你基本上有一个方法可以将某些内容放入队列(例如MSMQ),另一种方法可以返回给定jobId
的状态。
答案 1 :(得分:1)
您可以查看hangfire或signalR,通过事件处理程序通知客户端可能会发生长时间运行的进程。