TryExecuteTask(task) 是不是总是阻塞?

Posted

技术标签:

【中文标题】TryExecuteTask(task) 是不是总是阻塞?【英文标题】:Does TryExecuteTask(task) always block?TryExecuteTask(task) 是否总是阻塞? 【发布时间】:2016-06-26 03:58:48 【问题描述】:

我正在编写一个 FIFO 排队线程限制的任务调度程序。

在执行task 时,对TaskScheduler.TryExecuteTask(task) 的调用是否总是阻塞?到目前为止的测试表明情况确实如此,但是我在任何地方都找不到此文档。

在上述电话之后有什么理由打电话给task.Wait()吗?如果任务以Faulted 状态结束,则执行此操作会导致AggregateException

【问题讨论】:

【参考方案1】:

TryExecuteTask 的调用将始终阻塞,它会在您调用函数的调度程序上运行您提供的任务,并在任务成功完成时返回。

如果您希望任务在不同的线程中运行:在this page 上有一个示例,说明如何使用QueueUserWorkItem 通知线程池有工作要执行。当你在那里调用TryExecuteTask 时,一个可用的线程会拾取它并执行任务。

task.Wait() 通常用于将任务传递给调度程序以阻塞直到任务完成。由于您没有在不同的线程中执行任务,因此无论如何代码都会阻塞并调用task.Wait() 将是多余的。

【讨论】:

可读性小问题:在上面的第一句话中,“调度程序”这个词应该是“线程”吗:“它运行您在 [~~调度程序~ 〜线程]你正在调用函数”?

以上是关于TryExecuteTask(task) 是不是总是阻塞?的主要内容,如果未能解决你的问题,请参考以下文章

GO 计算所有并发任务的总时间 WaitGroup

spark优化

spark优化

Task.WhenAll(taskList).Wait() 是不是与 Task.WaitAll(taskList) 相同?

Task.Run() 代码是不是异步执行?

我从只返回 Task 而不是 Task<T> 的方法返回啥?