在等待在同一个线程上执行之后如何获得延续?

Gar*_*ill 5 c# async-await c#-5.0

正如我最近发现的那样,做一个await没有同步上下文的时候可能会导致在等待在不同的线程上执行之后的代码.

我目前在VSTO办公室加载项中遇到奇怪的行为问题,我认为这可能是这种行为的结果.处理Office应用程序引发的事件时,没有适当的同步上下文(除非我创建一个表单,它将创建一个同步上下文).

我的问题是,创建表单是确保我有同步上下文的最佳/最有效的方法,还是有一种更简单的方法.

Ste*_*ary 5

Office应用程序确实在STA上下文中调用它们的事件,但它们不提供适当的事件SynchronizationContext.

解决这个问题的最简单方法是在我的SynchronizationContextOdds and Ends博客中解释,在这里我简要描述了我在为我的文章进行研究时发现的一些杂项,但其重要性不足以包括在内.要解决此问题,请在每个事件开始时执行以下操作:

SynchronizationContext.SetSynchronizationContext(
    new WindowsFormsSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)

之后的任何awaits应该在STA线程上恢复.