9
接口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
的規定到處。
那麼,問題是:SetStateMachine
功能的目的是什麼IAsyncStateMachine
接口,它在哪裏使用?
原始異步功能:
private static async Task<int> GetResult()
{
var task = GetSomeData();
DoSomeWork();
return await task;
}
什麼是異步代碼你用*反編譯*這個?很可能你只是沒有綁定 – Carsten
添加了原始的異步函數 –
是的 - 我認爲你不需要任何狀態機 - 想一想:你可以直接返回'tasḱ'並且編譯器可能知道這個 - 添加至少一個異步函數/任務,然後再次嘗試 – Carsten