????4??AsyncOperation?????????е??????????????CreateOperation() ???????????AsyncOperationManager?????AsyncOperation.CreateOperation() ?????????????AsyncOperation?????

????5??AsyncOperation???????SynchronizationContext??????????????ó???????“??????????”??????????????????
// ??????????????д????????????????????? 
public class SynchronizationContext 

    // ???????????????????? 
    public static SynchronizationContext Current { get; } 
  
    // ??????????????д???????????????????? 
    public virtual void OperationStarted(); 
    // ??????????????д???????????????????????????? 
    public virtual void Post(SendOrPostCallback d?? object state); 
    // ??????????????д???????????????????? 
    public virtual void OperationCompleted(); 
    …… 
}

????a????AsyncOperation???????е???SynchronizationContext??OperationStarted() ??

????b????AsyncOperation?? Post() ?????е???SynchronizationContext??Post() ??

????c????AsyncOperation??OperationCompleted()?????е???SynchronizationContext??OperationCompleted()??

????6??SendOrPostCallback????????
// ???????????????????????????????????????? 
public delegate void SendOrPostCallback(object state);

???????????????????????

????1?????????????????????????????????????????????????????????????

????1????????????????? ***Async?????????????? ***Completed ??????????Щ??????????汾??

????2?????????????????? ***Async???????????????????????? ***Completed ??????????Щ??????????汾??

????3?????????????????????????????????CancelAsync()?????????????????????????ReportProgress() ????+ProgressChanged???????

????4???????????????????????????????????????????????????????

????a???????????????????????????????????

????b??????????EventArgs??????????????????????? ***ProgressChanged????????÷?????????????????

????5????????????????????????????IsBusy?????

????6?????????????????汾???? Out ?? Ref ????????????????? ***CompletedEventArgs????????eg??
public int MethodName(string arg1?? ref string arg2?? out string arg3); 
  
public void MethodNameAsync(string arg1?? string arg2); 
public class MethodNameCompletedEventArgs : AsyncCompletedEventArgs 

    public int Result { get; }; 
    public string Arg2 { get; }; 
    public string Arg3 { get; }; 
}

????2????????????????????????????????С??????

????1???***Async????????????userState??????????????????????***Async????????е????????????????????????????????????

????2??????????????????????????userState???????????? lock ????????????????????????????????????????userState????

????3????***Async????????????AsyncOperationManager.CreateOperation??????userState????????????????AsyncOperation????userState?洢??AsyncOperation??UserSuppliedState?????С?????????????????????????????????????????CompletedEventArgs??ProgressChangedEventArgs??????UserState??????????????????????????????????????

????4??????????userState???????????????????????????????????AsyncCompletedEventArgs.UserState???????????????