You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于NSUrlSessionTaskDelegate DidSendBodyData中totalBytesSent上传进度乱序的问询

NSUrlSessionTaskDelegate DidSendBodyData 中 totalBytesSent 乱序的问题

结论

DidSendBodyData回调里的totalBytesSent出现乱序是已知的预期行为,你无法依赖该值的严格递增顺序。

原因说明

即使将HttpMaximumConnectionsPerHost设置为1,底层网络传输的机制(比如TCP数据包重传、滑动窗口动态调整、系统内部缓存调度逻辑)仍可能导致回调触发顺序与字节实际发送顺序不完全匹配,进而出现totalBytesSent数值波动的情况。这种乱序在小文件上传中出现1-3次属于正常现象。

解决建议

如果需要展示准确的上传进度,建议自行维护全局的已发送字节最大值,每次回调时取当前totalBytesSent与该最大值的较大值作为有效进度值,示例代码如下:

public class TestUploadDelegate : NSUrlSessionTaskDelegate
{
    private long _maxTotalBytesSent = 0;

    public override void DidSendBodyData(NSUrlSession session, NSUrlSessionTask task, long bytesSent, long totalBytesSent, long totalBytesExpectedToSend)
    {
        _maxTotalBytesSent = Math.Max(_maxTotalBytesSent, totalBytesSent);
        Console.WriteLine($"有效totalBytesSent {_maxTotalBytesSent}");
    }
}

你的测试代码

Delegate实现

// For use with NSUrlSession that is configured for HttpMaximumConnectionsPerHost = 1
public class TestUploadDelegate : NSUrlSessionTaskDelegate
{
    public override void DidSendBodyData(NSUrlSession session, NSUrlSessionTask task, long bytesSent, long totalBytesSent, long totalBytesExpectedToSend)
    {
         Console.WriteLine($"totalBytesSent {totalBytesSent}");
    }
}

NSUrlSession创建代码

public NSUrlSession GetFileHostUrlSession()
{
    if (this.fileHostUrlSession == null)
    {
        using var configuration = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration(FileHostSessionIdentifier);
        configuration.AllowsCellularAccess = true;
        configuration.WaitsForConnectivity = true;
        configuration.ShouldUseExtendedBackgroundIdleMode = true;
        configuration.SessionSendsLaunchEvents = true;
        configuration.Discretionary = false;
        configuration.HttpMaximumConnectionsPerHost = 1; // Set to 1 for testing
        this.fileHostUrlSession = NSUrlSession.FromConfiguration(configuration, new TestUploadDelegate() as INSUrlSessionDelegate, new NSOperationQueue());
    }
    return this.fileHostUrlSession;
}

内容的提问来源于stack exchange,提问作者Magnetic Llama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:20:44