Table of Contents

Property OnDataReceived

Namespace
CurlUnity.Http

OnDataReceived

流式数据回调(文件下载等场景)。 设置后响应体不缓冲,数据逐块交付,Response.Body 为 null。 在后台线程调用。参数: (buffer, offset, length)

public Action<byte[], int, int> OnDataReceived { get; set; }

Property Value

Action<byte[], int, int>

Remarks

契约:回调必须快速返回。 该回调在 libcurl 的 write function 调用栈内执行,libcurl 不允许中断进行中的回调;在回调里阻塞会直接 占住 worker 线程:

  • 同一 IHttpClient 上其它请求的 I/O 推进会被延迟;
  • Dispose 时 worker 线程无法及时退出;超过内部超时后 Dispose 会 跳过 curl_multi_cleanup(记一条错误日志),让 multi handle 交由 OS 在进程退出时回收,以免与仍在执行的回调发生 use-after-free。
需要长时间处理数据时,回调里把 buffer 拷走投递到别的线程即可,不要在 回调里同步等 I/O、锁或其它长耗时工作。