这是我的情景。
我想创建一个Web端点,它将启动可能长时间运行的服务,可能需要20-30分钟。我想立即返回一个HttpResponseResult并触发服务异步运行,而不必等待服务完成后再将响应返回给客户端。
最简单的方法是做什么?我不需要从服务中返回任何类型的结果,只需触发它。
答案 0 :(得分:1)
只需使用Task.Run(() => <trigger service call> )
运行任务并忽略返回值。唯一的缺点是它会消耗线程池中的一个线程。如果服务具有您正在调用的操作的异步版本,则可以使用TaskCompletionSource
答案 1 :(得分:0)
SignalR
将是我做这种行为的选择。教程是here。
基本上,客户端调用服务器方法/操作并且“完成”(您可以继续并在客户端执行任何操作)。服务器完成后,它会通过RPC将数据/通知推送到客户端。
在服务器端,您可以随意执行代码,同步或异步。