簡體   English   中英

.Net AsyncStateMachine自定義實現行為

[英].Net AsyncStateMachine custom implementation behaviors

我實現了一個自定義異步方法構建器,但我有幾個問題,我無法找到正確的答案。

1)我看到這取決於我如何構建(調試/發布),狀態機被編譯成結構或類。 是否有可能指示編譯器始終生成一個類,無論如何?

2)我看到void SetStateMachine(IAsyncStateMachine m)根本沒有被調用,即使在文檔中說,如果狀態機是一個結構,它應該被調用它的盒裝版本。

3)我讓我的方法構建器成為一個類。 我應該把它變成一個結構嗎? 這是什么最好的做法?

4)奇怪的是,GetAwaiter有時在調用builder.SetResult方法后調用。 這是正常行為嗎? 如果我們檢查任務的反編譯版本,我們可以清楚地看到它首先請求awaiter,如果awaiter沒有完成,它會調用機器狀態AwaitOnCompleted / AwaitUnsafeOnCompleted。

環境:.Net Core 2.1

非常感謝!

回答你的問題1和3,你可以參考asyncRewriter的roslyn編譯器代碼

選擇用於重寫的結構或類由EditAndContinue狀態決定

// The CLR doesn't support adding fields to structs, so in order to enable EnC in an async method we need to generate a class.
var typeKind = compilationState.Compilation.Options.EnableEditAndContinue ? TypeKind.Class : TypeKind.Struct;

鏈接

暫無
暫無

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

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