簡體   English   中英

在等待在同一個線程上執行之后如何獲得延續?

[英]How can I get the continuation after an await to execute on the same thread?

正如我最近發現的那樣,在沒有同步上下文的情況下進行await可能會導致在等待在不同線程上執行之后的代碼。

我目前在VSTO辦公室加載項中遇到奇怪的行為問題,我認為這可能是這種行為的結果。 處理Office應用程序引發的事件時,沒有適當的同步上下文(除非我創建一個表單,它將創建一個同步上下文)。

我的問題是,創建表單是確保我有同步上下文的最佳/最有效的方法,還是有一種更簡單的方法。

Office應用程序確實在STA上下文中調用它們的事件,但它們不提供適當的SynchronizationContext

解決這個問題的最簡單的解決方法是在我的SynchronizationContext文本中討論 ,其中我簡要介紹了我在為文章進行研究時發現的一些雜項,但這些內容並不重要。 要解決此問題,請在每個事件開始時執行以下操作:

SynchronizationContext.SetSynchronizationContext(
    new WindowsFormsSynchronizationContext());

任何await s之后應該在STA線程上恢復。

您可能希望查看本文 ,其中介紹了如何在沒有消息泵的情況下設置SynchronizationContext。 請注意,這實際上只有在您希望等待其他工作時才會有用(排隊多次回調。)如果您一次只等待一件事,您的代碼也可能只是同步運行,因為您不要與你的空閑時間有任何關系,比如運行消息泵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM