C# 信号集线器方法未向IProgress.Report报告所有调用

C# 信号集线器方法未向IProgress.Report报告所有调用,c#,asp.net,signalr,signalr-hub,signalr.client,C#,Asp.net,Signalr,Signalr Hub,Signalr.client,这里有一种情况,我的javascript应用程序正在使用带有signalR代理的web套接字回调服务器 我有一个长时间运行的方法,我会报告10次进度 然而,我注意到客户端进程回调并不总是被调用10次,即使服务器方法肯定会调用它10次 以下是为清晰起见简化的服务器方法伪代码: public async Task LongRunning(IProgress<Something> progress) { var things = await Get10ThingsF

这里有一种情况,我的javascript应用程序正在使用带有signalR代理的web套接字回调服务器

我有一个长时间运行的方法,我会报告10次进度

然而,我注意到客户端进程回调并不总是被调用10次,即使服务器方法肯定会调用它10次

以下是为清晰起见简化的服务器方法伪代码:

public async Task LongRunning(IProgress<Something> progress)
    {
        var things = await Get10ThingsFromDb();
        foreach (var thing in things)
        {
            var something = ComputeSomething(thing);
            progress.Report(something);
        }
    }
公共异步任务长时间运行(IProgress进程)
{
var things=wait Get10ThingsFromDb();
foreach(事物中的事物)
{
var something=计算某物;
进度报告(某事);
}
}
请注意,在最后一次调用progress.Report之后,该方法立即完成

大多数情况下,它工作正常,但可能每5次就有一次,我接到的举报电话不到10个,有时甚至只有1个

我检查了Chrome中的网络选项卡,问题似乎是服务器有时在发送所有报告之前发送方法完成结果

因此,在正常情况下,服务器发送以下帧

-报告10次

-完成1次

但在失败的情况下,服务器会发送以下帧

-报告7次

-完成1次

-报告3次

我猜js客户端会丢弃完成后发生的任何进度报告

我最后添加了
等待任务。延迟(100)
在服务器方法的末尾,以避免竞争条件。这并不理想

这是一个错误还是我遗漏了什么

谢谢