没有字节的写入时间超过给定时间段时如何取消流CopyToAsync

prcdpr

我想检测Stream.CopyToAsync操作停顿,并检测超过1分钟的时间没有字节被复制。

那怎么办?

扎法尔

您需要定期检查Stream.Length,如果没有进度,请取消使用CancellationTokenSource这是基本上使用计时器来定期检查复制是否有进展的代码。

using System.IO;
using System.Threading;
using System.Threading.Tasks;
var copyingCompleted = false;
var copyBufferSize = 4096;
var interval = (int)TimeSpan.FromMinutes(1).TotalMilliseconds;
var initialTimeoutMilliseconds = -1;//inifinite
var timer = new Timer(OnTimerElapsed,null,initialTimeoutMilliseconds,interval);
var cts = new CancellationTokenSource();
long streamLength = 0;

Stream srcStream = null;//should be your sourceStream
Stream dstStream = null;//should be your destination stream
await Copy(srcStream,dstStream,cts.Token);

public async Task Copy(Stream src,Stream dst, CancellationToken cancellationToken){
    timer.Change(interval,interval);
    try{
        await src.CopyToAsync(dst,copyBufferSize, cancellationToken);
    }
    finally{
        copyingCompleted = true;
    }
}

public void OnTimerElapsed(object state){
    if(copyingCompleted){
        //stop the timer
        timer.Change(-1,-1);
        return;
    }

    //check if the copying has progressed since the last interval callback was invoked
    if(dstStream.Length > streamLength){
        //copy has progressed, I will check you in the next interval
        streamLength = dstStream.Length;
        return;
    }

    //you didn't make any progress, I am cancelling the copy process
    cts.Cancel();
}

这不是完整的实现,你需要采取处置的一次性资源,包括护理TimerCancellationTokenSourceStream小号

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在给定时间段内抓取所有子redditit帖子

来自分类Dev

如何显示没有按钮且在指定时间段后消失的消息框?

来自分类Dev

如何显示没有按钮且在指定时间段后消失的消息框?

来自分类Dev

如何正确计算给定时间段之间的时间间隔?

来自分类Dev

如何比较MySql表中的时间戳并选择早于给定时间段

来自分类Dev

给定时间段之间的SQL作业计划

来自分类Dev

RxJava:仅在给定时间段内的第一项时发出

来自分类Dev

ScheduledExecutorService 在给定时间段内以给定时间执行任务

来自分类Dev

Flutter:如何限制用户在给定时间段内单击按钮的次数?

来自分类Dev

MySQL选择时间戳最接近但不超过给定时间戳的行

来自分类Dev

如何在特定时间段内运行CLLocationManager

来自分类Dev

如何安排tcpdump在特定时间段内运行?

来自分类Dev

如何使函数在特定时间段内运行?

来自分类Dev

特定时间段后如何显示活动

来自分类Dev

如何在特定时间段后禁用登录

来自分类Dev

精美的代码可在R中给定时间段生成等距的时间戳

来自分类Dev

在给定时间段内找到给定组的均值

来自分类Dev

如何获取给定时间段内处于活动状态的AKS中的吊舱数量

来自分类Dev

有没有办法监听在特定时间段内jms队列元素是否已出队

来自分类Dev

如何巩固时间段?

来自分类Dev

给定时间段的每月第一天的Python列表

来自分类Dev

Primefaces Schedule在给定时间段的每个星期添加一个事件

来自分类Dev

SQL:查找给定时间段内用户的状态更改日期

来自分类Dev

MapReduce分析一天中给定时间段内的产品销售情况

来自分类Dev

在给定时间段内空闲时将用户重定向到主页

来自分类Dev

Primefaces Schedule在给定时间段的每个星期添加一个事件

来自分类Dev

仅在给定时间段内进行本地通知

来自分类Dev

FileNet-报告给定时间段内登录Filenet的用户总数

来自分类Dev

选择给定时间段的状态历史记录表的活动状态

Related 相关文章

  1. 1

    如何在给定时间段内抓取所有子redditit帖子

  2. 2

    如何显示没有按钮且在指定时间段后消失的消息框?

  3. 3

    如何显示没有按钮且在指定时间段后消失的消息框?

  4. 4

    如何正确计算给定时间段之间的时间间隔?

  5. 5

    如何比较MySql表中的时间戳并选择早于给定时间段

  6. 6

    给定时间段之间的SQL作业计划

  7. 7

    RxJava:仅在给定时间段内的第一项时发出

  8. 8

    ScheduledExecutorService 在给定时间段内以给定时间执行任务

  9. 9

    Flutter:如何限制用户在给定时间段内单击按钮的次数?

  10. 10

    MySQL选择时间戳最接近但不超过给定时间戳的行

  11. 11

    如何在特定时间段内运行CLLocationManager

  12. 12

    如何安排tcpdump在特定时间段内运行?

  13. 13

    如何使函数在特定时间段内运行?

  14. 14

    特定时间段后如何显示活动

  15. 15

    如何在特定时间段后禁用登录

  16. 16

    精美的代码可在R中给定时间段生成等距的时间戳

  17. 17

    在给定时间段内找到给定组的均值

  18. 18

    如何获取给定时间段内处于活动状态的AKS中的吊舱数量

  19. 19

    有没有办法监听在特定时间段内jms队列元素是否已出队

  20. 20

    如何巩固时间段?

  21. 21

    给定时间段的每月第一天的Python列表

  22. 22

    Primefaces Schedule在给定时间段的每个星期添加一个事件

  23. 23

    SQL:查找给定时间段内用户的状态更改日期

  24. 24

    MapReduce分析一天中给定时间段内的产品销售情况

  25. 25

    在给定时间段内空闲时将用户重定向到主页

  26. 26

    Primefaces Schedule在给定时间段的每个星期添加一个事件

  27. 27

    仅在给定时间段内进行本地通知

  28. 28

    FileNet-报告给定时间段内登录Filenet的用户总数

  29. 29

    选择给定时间段的状态历史记录表的活动状态

热门标签

归档