显示长期运行流程的进度

时间:2017-01-11 06:05:47

标签: c# asynchronous asp.net-core

我有一些服务器端进程可能需要很长时间才能运行(30-60米)。这些是从我的网络服务器调用Web API并限制请求以匹配服务的最大请求率的结果。

我希望能够在客户端上显示此进度,我该怎么做呢?我从哪里开始?

以前的答案暗示了SignalR,但这似乎与Asp.Net Core不相符。

编辑:看起来SignalR是Asp.Net核心的东西。在这种情况下,我有一个后续问题:

我使用AngularJS并通过对API端点的AJAX请求来管理客户端状态。是否有任何潜在的编码或表现"陷阱"当试图同时使用SignalR时?

此外,有没有替代方案可以将SignalR作为依赖项添加?看起来它需要一个.Net版本的beta版本,我宁愿保持稳定 - 如果可能的话,释放土地。

1 个答案:

答案 0 :(得分:0)

您可以使用SignalR和API接口来处理此问题。基本实现是这样的:

服务器侧

[HubName("messageHub")]
public class MessageHub : Hub  // This is your server-side SignalR
{
    public async Task Countdown(IProgress<int> progress) // This is your IProgress
    {            
         // 60 second countdown for an example
         // NOT TESTED
         for (int i = 1; i <= 61; i += 1)
         {             
              await Task.Delay(1000);
              progress.Report(i);                    
         }
     }
}

客户端

// Hub connection
//
var messageConnection = $.hubConnection(url);
var messageHub = messageConnection.createHubProxy('MessageHub');
$.connection.hub.logging = true