【问题标题】:Does TryExecuteTask(task) always block?TryExecuteTask(task) 是否总是阻塞?
【发布时间】:2023-03-13 17:50:02
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 可读性小问题:在上面的第一句话中,“调度程序”这个词应该是“线程”吗:“它运行您在 [~~调度程序~ 〜线程]你正在调用函数”?
    猜你喜欢
    • 2017-07-23
    • 2020-09-16
    • 2011-04-09
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多