Re[3]: async плохо?
От: Sharov Россия  
Дата: 22.07.22 21:17
Оценка:
Здравствуйте, ksg71, Вы писали:

S>>Во втором случае метод должен вернуть Task, поэтому правильно не компилируется. Почему компилируется первый метод-- без понятия. Ну т.е., видимо, в первом методе не обязательно что-либо возвращать.

K>в первом компилятор сам вставит код который таск вернет

Ага, вот такая штука будет скомпилирована:
[CompilerGenerated]
    private sealed class <Do>d__1 : IAsyncStateMachine
    {
        public int <>1__state;

        public AsyncTaskMethodBuilder <>t__builder;

        public C <>4__this;

        private void MoveNext()
        {
            int num = <>1__state;
            try
            {
            }
            catch (Exception exception)
            {
                <>1__state = -2;
                <>t__builder.SetException(exception);
                return;
            }
            <>1__state = -2;
            <>t__builder.SetResult();
        }

        void IAsyncStateMachine.MoveNext()
        {
            //ILSpy generated this explicit interface implementation from .override directive in MoveNext
            this.MoveNext();
        }

        [DebuggerHidden]
        private void SetStateMachine(IAsyncStateMachine stateMachine)
        {
        }

        void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine)
        {
            //ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
            this.SetStateMachine(stateMachine);
        }
    }

   

    [AsyncStateMachine(typeof(<Do>d__1))]
    [DebuggerStepThrough]
    private Task Do()
    {
        <Do>d__1 stateMachine = new <Do>d__1();
        stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
        stateMachine.<>4__this = this;
        stateMachine.<>1__state = -1;
        stateMachine.<>t__builder.Start(ref stateMachine);
        return stateMachine.<>t__builder.Task;
    }
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.