C# AsyncStateMachine 反编译

Bor*_*tic 4 c# async-await

我有几乎可以工作的代码,但OnRequest方法充满了错误,我看到它是我认为的编译代码。将这段代码变成人类可读的代码有什么帮助吗?

[AsyncStateMachine(typeof(Service1.<OnRequest>d__24))]
public Task OnRequest(object sender, SessionEventArgs e)
{
    Service1.<OnRequest>d__24 <OnRequest>d__;
    <OnRequest>d__.<>4__this = this;
    <OnRequest>d__.e = e;
    <OnRequest>d__.<>t__builder = AsyncTaskMethodBuilder.Create();
    <OnRequest>d__.<>1__state = -1;
    AsyncTaskMethodBuilder <>t__builder = <OnRequest>d__.<>t__builder;
    <>t__builder.Start<Service1.<OnRequest>d__24>(ref <OnRequest>d__);
    return <OnRequest>d__.<>t__builder.Task;
}
Run Code Online (Sandbox Code Playgroud)

或者我在这里很无助,我不知道那是什么,如果我无法解决这个问题,我希望在最坏的情况下得到解释。

Ste*_*nio 5

字符<>无效C#的类型和变量名,但他们在完全有效的CIL代码。

ILSpy不会“规范化”名称,因此您会获得不可编译的代码,但您可以删除特殊字符来修复它:

[AsyncStateMachine(typeof(Service1.OnRequestd__24))]
public Task OnRequest(object sender, SessionEventArgs e)
{
    Service1.OnRequestd__24 OnRequestd__;
    OnRequestd__.__this = this;
    OnRequestd__.e = e;
    OnRequestd__.t__builder = AsyncTaskMethodBuilder.Create();
    OnRequestd__.__state = -1;
    AsyncTaskMethodBuilder t__builder = OnRequestd__.t__builder;
    t__builder.Start<Service1.OnRequestd__24>(ref OnRequestd__);
    return OnRequestd__.t__builder.Task;
}
Run Code Online (Sandbox Code Playgroud)

如果您还实现了引用类型,这将完美编译:

public class Service1
{
    public struct OnRequestd__24 : IAsyncStateMachine
    {
        public ObjectPoolAutoTest __this;
        public SessionEventArgs e;
        public AsyncTaskMethodBuilder t__builder;
        public int __state;
        public void MoveNext() => throw new NotImplementedException();

        public void SetStateMachine(IAsyncStateMachine stateMachine) => throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)