WPF await 从 UI 线程切换

WPF await switches from the UI thread

我有一个从 UI 线程调用的函数,我正在仔细检查是否是

System.Windows.Threading.Dispatcher.FromThread(System.Threading.Thread.CurrentThread)

一切都是从 void 方法调用的,不能是 async void 因为它有一个 out 参数(来自第 3 方 API 的方法)。

所以在这个 void 方法中我调用了一个 async 方法,主方法不必等待,所以我只是 运行 它并忘记了(计划处理 ContinueWith 方法中的异常,但我还没有。

问题是,当在方法链中对 RestSharp 客户端的 ExecuteTaskAsync 方法执行 await 时,在该行之后,线程被设置为 MTA,SynchronizationContext.Current 也不一样。

为什么会这样? await 关键字 return 不应该是原始 SynchronizationContext 吗?为什么 SynchronizationContext.Current 在调用期间发生变化?

抱歉,没有代码片段,它是更大应用程序的一部分,很难将其片段化,但我现在正在做,所以将添加代码片段。

好的,解决了,提到的来自第 3 方 API 的 void 方法是 运行 具有调度程序的线程,因为

System.Windows.Threading.Dispatcher.FromThread(System.Threading.Thread.CurrentThread)

返回了一个调度程序,我不知道为什么,但这没关系,我不得不 运行 我的异步方法 Invoke 就像

Application.Current.Dispatcher.Invoke(() => myAsyncMethod());

然后我方法中的 await 没有切换 SynchronizationContext。 看起来我的假设是当有调度员时它的正确上下文是错误的,不知道为什么 :)