【问题标题】:How to spawn multiple threads, process the fastest and abort the rest如何产生多个线程,以最快的速度处理并中止其余线程
【发布时间】:2013-06-26 17:58:10
【问题描述】:

假设有多种方法可以执行某项操作,并且每种方法的效率都更高。我想产生多个线程来完成一个动作,看看哪个先完成。我该怎么做?我知道我会产生多个线程,但首先完成的线程必须向主线程返回一个值,这将不得不中止所有正在运行的线程。这是为了学习,所以我想了解如何使用线程和任务库来做到这一点。

【问题讨论】:

  • 我认为WaitAny() 可以使用trick 或者对于TPL,您可以使用this
  • stackoverflow.com/questions/14726854/… - 这几乎是您问题的 90%。
  • @Vivek 实际上,这个问题要求的不仅仅是这个问题。它要求第一个结果匹配某个条件,这比这更复杂。

标签: c# asp.net .net multithreading task-parallel-library


【解决方案1】:
  1. 让所有替代方式都接受CancellationToken
  2. 创建一个CancellationTokenSource 并调用所有替代方法作为单独的Tasks,将Token 传递给Tasks 和执行的方法。
  3. 使用Task.WaitAny(tasks)await Task.WhenAny(tasks) 等待最快的Task 完成。从该调用的结果中,您可以得到最快的Task 的结果。
  4. Cancel() 取消令牌通知其余的 Tasks 在方便时尽快停止。

【讨论】:

  • @Eitan 你的意思是使用Thread 类?你为什么想这么做?大多数时候,TPL 更方便。
  • 对于我的一般知识,如果我必须使用 2.0 项目
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 2020-09-13
相关资源
最近更新 更多