gpt4 book ai didi

multithreading - 在 Silverlight UI 线程中,执行 InvokeAsync 时会发生什么情况?

转载 作者:行者123 更新时间:2023-12-03 22:43:32 24 4
gpt4 key购买 nike

我正在尝试解决 SL 性能问题。到目前为止,我有由 InvokeAsync 执行的 WCF 调用。现在,我将其更改为使用 BackgroundWorker。性能大大提高。

什么会导致这种情况? InvokeAsync 到底做了什么影响了 UI 线程?它是否打开了另一个 UI 线程?

谢谢

最佳答案

它归结为同步上下文。一个线程可能与 SynchronizationContext 相关联,例如 DispatcherSynchronizationContext(它是 UI 线程的上下文并且只包含这个线程)。 WCF 将在它开始的同一个同步上下文中完成一个操作,如果没有与线程关联的同步上下文,它将使用线程池中的任何线程。

因此,如果您有几个未完成的异步操作都从 UI 线程调用,那么所有这些操作都将希望在 UI 线程中运行它们的完成代码。如果它们中的多个同时完成,则完成代码将不得不排队等待分派(dispatch)到这个单个 UI 线程中。

而当您在后台工作程序中调用异步操作时,它在线程池中的线程中运行并且没有特殊的同步上下文。当这些操作完成时,它们的完成代码可以在池中的任何可用线程上运行(其中有几个)。因此几乎同时完成的任务都可以在不同线程上并行运行。

关于multithreading - 在 Silverlight UI 线程中,执行 InvokeAsync 时会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6610438/

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