gpt4 book ai didi

c# - 异步委托(delegate)什么时候应该使用回调模式?

转载 作者:行者123 更新时间:2023-11-30 14:43:06 26 4
gpt4 key购买 nike

与异步委托(delegate)一起使用的模式之一也是回调模式,其中初始线程(调用 BeginInvoke 的线程)T1 继续运行,无需等待或检查生成的线程 T2 是否已完成。相反,当 T2 完成时,T2 调用处理结果的回调方法,调用 EndInvoke 并通知 T1 任务已完成。

a) 如果回调方法应该在任务完成时通知 T1,那么为什么不在 T1 而不是 T2 内部调用此回调方法?

2) 回调方法应该如何通知 T1 T2 已完成,是否有一些标准模式?

3)即使T1需要接收异步调用方法的返回值,是否也应该使用回调模式?

谢谢

最佳答案

  • 为什么没有在T1调用回调方法?

通常这是不可能的;如果 T1 停止做一些其他工作,则无法将工作编码回它,除非该线程已经具有用于在其上发布和安排工作的机制(例如,UI 线程,通过 SynchronizationContext)。

  • 是否有跨线程通知的标准模式?

我会说不;有许多跨线程同步模式,每种模式适用于不同的目标场景。

  • 如果 T1 需要返回值怎么办?

如果T1需要当前栈下的返回值,那么最终它要阻塞才能得到它。阻塞可能通过调用 EndInvoke、使用 WaitHandle 或上一条中的其他策略来实现。

如果需要返回值的东西“只是线程”(例如 UI 线程)而不是在特定的调用堆栈/激活上下文下,那么通常使用 SynchronizationContext.Post 或 Dispatcher.Invoke 来编码最终返回的工作准备就绪后发送到 UI 线程。

关于c# - 异步委托(delegate)什么时候应该使用回调模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com