Interfejs IAsyncStateMachine
może być używany tylko przez kompilator i służy do generowania automatu stanów dla metod asynchronicznych. Interfejs ma SetMachineState
- konfiguruje automat stanów z repliką przydzieloną sterty (z msdn).Jaki jest cel IAsyncStateMachine.SetStateMachine?
użyłem ILSpy
dekompilować kodu i odkryć generowane machiny państwowej i wspomniał, że realizacja SetMachineState
funkcji jest zawsze pusty, jak to
[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
}
}
Jeszcze jedno, generowane maszyna stanów jest nie class
struct
jak stwierdzono wszędzie.
Pytanie brzmi: jaki jest cel funkcji SetStateMachine
interfejsu , gdzie jest używany?
Oryginalna funkcja asynchroniczny:
private static async Task<int> GetResult()
{
var task = GetSomeData();
DoSomeWork();
return await task;
}
jaki jest kod asynchroniczny użyty do * dekompilacji * tego? Najprawdopodobniej po prostu nie miałeś powiązania – Carsten
dodano oryginalną funkcję asynchroniczną –
yep - Myślę, że nie potrzebujesz do tego żadnej maszyny stanowej - pomyśl o tym: równie dobrze możesz zwrócić 'tasḱ' bezpośrednio i kompilator może to wiedzieć- dodaj co najmniej jeszcze jedną asynchroniczną funkcję/zadanie i spróbuj ponownie – Carsten