インターフェイスIAsyncStateMachine
は、コンパイラによってのみ使用でき、非同期メソッド用のステートマシンの生成に使用されます。インターフェイスはSetMachineState
です - (msdnからの)ヒープ割り当てされたレプリカでステートマシンを構成します。IAsyncStateMachine.SetStateMachineの目的は何ですか?
私は、コードをコンパイルするためにILSpy
を使用して生成されたステート・マシンを発見し、SetMachineState
機能の実装は、この
[CompilerGenerated]
private sealed class <GetResult>d__1 : IAsyncStateMachine
{
//some fields to hold state
void IAsyncStateMachine.MoveNext()
{ ... }
[DebuggerHidden]
void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine)
{
//Method is empty
}
}
もう一つのように、常に空であることを言及し、生成されたステートマシンが述べたようにclass
ないstruct
ですどこにでも。
したがって、質問は次のとおりです。の機能の目的はどこですか?
オリジナル非同期機能:あなたはdebug
ビルドではなくrelease
1を見ているので
private static async Task<int> GetResult()
{
var task = GetSomeData();
DoSomeWork();
return await task;
}
*これを逆コンパイルするために使用した非同期コードは何ですか?ほとんどの場合バインドされていない可能性があります – Carsten
オリジナルの非同期関数が追加されました –
これは状態マシンが必要ないと思います:少なくとももう1つの非同期関数/タスクを追加して、もう一度 – Carsten