L'interfaccia IAsyncStateMachine
può essere utilizzata solo dal compilatore e viene utilizzata nella generazione della macchina di stato per i metodi asincroni. L'interfaccia ha SetMachineState
- configura la macchina di stato con una replica allocata su heap (da msdn).Qual è lo scopo di IAsyncStateMachine.SetStateMachine?
Ho usato ILSpy
per decompilare codice e scoprire generato macchina a stati e dicono che l'attuazione di SetMachineState
funzione è sempre vuota, simili
[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
}
}
Un'altra cosa, macchina a stati generato è un non class
una struct
come indicato ovunque.
Quindi, la domanda è: qual è lo scopo della funzione SetStateMachine
dell'interfaccia IAsyncStateMachine
, dove viene utilizzata?
funzione asincrona originale:
private static async Task<int> GetResult()
{
var task = GetSomeData();
DoSomeWork();
return await task;
}
qual è il codice asincrono usato per * decompilare * questo? Molto probabilmente non hai avuto alcun legame – Carsten
aggiunto la funzione asincrona originale –
sì - Penso che non ti serva alcuna macchina di stato per quello - pensaci: puoi anche restituire 'tasḱ' direttamente e il compilatore potrebbe sapere questo- aggiungi almeno un'altra funzione asincrona/task e riprova – Carsten