从mvc控制器触发异步操作

时间:2014-02-21 01:47:13

标签: c# asp.net-mvc asynchronous

这是我的情景。

我想创建一个Web端点,它将启动可能长时间运行的服务,可能需要20-30分钟。我想立即返回一个HttpResponseResult并触发服务异步运行,而不必等待服务完成后再将响应返回给客户端。

最简单的方法是做什么?我不需要从服务中返回任何类型的结果,只需触发它。

2 个答案:

答案 0 :(得分:1)

只需使用Task.Run(() => <trigger service call> )运行任务并忽略返回值。唯一的缺点是它会消耗线程池中的一个线程。如果服务具有您正在调用的操作的异步版本,则可以使用TaskCompletionSource

答案 1 :(得分:0)

SignalR将是我做这种行为的选择。教程是here

基本上,客户端调用服务器方法/操作并且“完成”(您可以继续并在客户端执行任何操作)。服务器完成后,它会通过RPC将数据/通知推送到客户端。

在服务器端,您可以随意执行代码,同步或异步。