csharp高级练习题:并发任务执行【难度:3级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

本文提供了一个C#编程挑战,要求实现一个类,该类能够并发执行一组任务,并根据任务状态(成功、失败或超时)返回执行摘要。任务数量在25到60个之间,需要在给定超时内执行,同时保证成功的任务按执行时间顺序返回,失败或超时任务的顺序不限。禁止使用繁忙循环和特定的等待方法,并指出解决方案可能因并发API的不确定性而面临测试失败的风险。
摘要由CSDN通过智能技术生成

csharp高级练习题:并发任务执行【难度:3级】:

实现一个Worker类,它给出了一组任务(Java中的Runnable接口的实现和C# 中的自定义Runnable类)将同时执行它们并返回执行摘要,其中任务分类为成功,失败或时间到.

例如,以下输入:


actions = [Task3(3s后抛出),Task4(4s后的compl.),Task2(2s后的compl.),Task1(1s后抛出)],timeout = 8s

应该在** 4 ** 秒后返回以下结果:


result.successful = [Task2,Task4]
result.failed =(Task3,Task1)
result.timedOut =()

以下输入:


actions = [Task3(3s后抛出),Task5(挂起),Task4(4s后的compl.),Task2(2s后的compl.),Task1(1s后的compl.),timeout = 8s

8秒后应返回以下结果:


result.successful = [Task1,Task2,Task4]
result.failed =(Task3)
result.timedOut =(Task5)

要求:

  • 您需要在作为参数给出超时之前执行任务,以及在CodeWars超出测试运行之前执行任务.目前,CodeWars的Java超时为16秒,C# 为12秒.所有任务的集体持续时间肯定会超过超时,因此您无法一个接一个地迭代执行任务.
  • 将执行25到60个任务之间的任务.
  • 某些任务将工作一段时间然后完成.其他将失败,其run方法将抛出一个未指定的异常.任务挂起并且不会在短时间内返回也可能发生. Worker需要将每个传递的任务分类为成功,失败或超时,并将它们添加到返回的ExecutedTasks实例的相应集合中.
  • 成功的任务* 必须* 按其持续时间的顺序返回.保证当所有任务同时开始时,每个成功的任务将在某个不同的时间点结束,并且不应该有两个任务在同一时刻完成(对于"同一时刻"的某些定义,请参阅note 下面).失败或超时任务的顺序并不重要.
  • 当发生没有挂起任务时,方法应该在不长于最长运行任务的持续时间的时间之后返回.例如,当执行时间最长的任务需要3秒钟时,方法应在3秒后返回+ 可能需要一些小的额外时间(但请参见下面的** 注释**).
  • 禁止这个kata在Java中使用繁忙的循环和Thread.sleep方法,在C# 中使用Thread.Sleep,因为所有的等待和块都应该用适当的方法和超时来实现.测试会做一些努力来快速检测旋转延迟循环,并且将扫描解决方案文件以查找短语**“sleep"或"Sleep”** 的所有出现,并且在找到任何短语时将被拒绝.这是一个文本搜索,因此短语不能作为您定义的变量或方法的名称出现,也不能出现在评论中(对不起!).它并不完美,因为它仍然允许其他不正确的延迟实现,这是我无法防范的,但请确保当你使用其中任何一个时,Threading Fairy会让你直接进入你的关键部分.

它保证:

  • 除非挂起,否则每个任务执行的超时时间都会少于预期.当它挂起时,它会挂起几分钟*,绝对不会在任何短时间内完成.您可以放心地假设,如果任务的执行超过了提供的超时,它就会挂起.
  • 作为参数给出的时间限制将始终显着小于CodeWars平台的超时.
  • 超时任务发生了什么并不重要.你可以杀死它们,你可以让它们继续运行.你不需要对它们采取任何特定的行动,但如果你这样做,它不会伤害任何人.只是不要崩溃他们:)
  • 任务大多是空闲和模拟阻塞操作(等待用户输入,I / O操作等),因此他们宁愿不会妨碍其他任务并阻止其执行.他们不会竞争任何类型的公共资源,包括CPU.
  • 引用Runnable对象作为输入集合点传递给唯一对象,并且没有重复项.

解决方案设置中提供了Worker类的框架:

公共类工人{
   

public static class ExecutedTasks {
   

public final List  successful = new ArrayList <>();
public
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值