【问题标题】:Events with Task Parallel Library带有任务并行库的事件
【发布时间】:2011-10-20 18:35:39
【问题描述】:

我正在使用 .NET 4.0 的任务并行库来执行长时间运行的任务。长时间运行的任务有不同的阶段,在它完成的每个阶段我想将一些信息记录到文本文件或数据库中。我没有在每个阶段调用日志方法,而是考虑使用发布者/订阅者模式,即在每个阶段,必须从长时间运行的任务中触发一些事件,而其他一些类必须监听这些事件并从事件中记录适当的信息目的。

我不太清楚在多线程环境中使用事件。在 TPL 中使用事件是个好主意吗?我该怎么做?寻找一些建议..

【问题讨论】:

    标签: .net events task-parallel-library


    【解决方案1】:

    您所描述的正是“Event based Asynchronous”模式。 BCL 中的各种类也正在实现这一点。例如:WebClient 类具有 DownloadStringAsync 方法,该方法在另一个线程上开始下载(使用 TPL 或其他方式),并且该类公开了 DownloadStringCompleted 和 DownloadProgressChanged(准确映射到您的长期运行任务中正在完成的步骤)。

    所以,基本上可以实现这个模式。重要的是要记住,这些事件将在运行任务的线程上引发,因此您需要确保这些事件的处理程序知道这一事实。

    【讨论】:

    • 感谢您的回复。事件处理程序将在触发事件的线程上执行 rgt?
    • @Mark:是的,正确的。事件就像一个委托列表,所以当你触发一个事件时,列表中的每个委托基本上都会一个一个地执行。
    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多