Здравствуйте, 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;
}